zapis v txt datoteko

Pomoč pri izdelavi makrov
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

zapis v txt datoteko

Odgovor Napisal/-a rick »

hojla :)

vprašal bi sledeče:

imam delovni zvezek xls.želel bi,da vsakič ko ga odprem,mi to zapiše v datoteko "c:/ podatki.txt " in sicer datum in čas.podatki naj bi se nalagali
v stolpec,torej en pod drugem.upam,da zadeva ni pretežka za forum.
za odgovor se zahvaljujem.

lp rick
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Koda: Izberi vse

Private Sub Workbook_Open()
    Open "C:\Podatki.txt" For Append As #1
        Print #1, "Odprto", Date, Time
        Print #1, "====================================" 'Za boljšo preglednost
    Close #1
End Sub
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljeni

zanimiva koda,jo bom koj sprobal,sem prepričan,da bo delovala...
brez dvoma.
hvala za vašo pomoč

lp rick
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljeni :) :)

glede na kodo,ki ste mi jo poslali bi imel še
eno podvprašanje:

vaša koda
Private Sub Workbook_Open()
Open "C:\Podatki.txt" For Append As #1
Print #1, "Odprto", Date, Time
Print #1, "====================================" 'Za boljšo preglednost
Close #1
End Sub
torej,z odprtjem excela sprožim to kodo,ki mi zapiše podatke v txt datoteko.
zanima me,če lahko v to datoteko vključim(zapišem) tudi vse podatke
ki so na listu 1 v tem delovnem zvezku.
za odgovor se najlepše zahvaljujem.

lp rick
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Pozdravljeni,

Da se tudi to. Poizkusil sem z snemanjem makra in mi je kar dobro uspelo. Rabil bi nekaj več podatkov: ali naj bi se zmeraj kopiralo vse kar je na listu1, ali pa vedno samo določeno območje celic? Vedno isto območje, ali pa bi vedno sproti določali kaj naj se prepiše v txt datoteko. Sicer ne vem kaj vam to bo, pa tudi ne vem, če vam bo oblika v txt datoteki ravno všeč? Včasih vse skupaj malo čudno izpade in bi morali popravljati obliko txt datoteke. Sporočite, pa vam bomo skušali pomagati.
Morda je celo najlažje, da podatke iz zvezka kopirate, odprete txt datoteko in prilepite?

lp,

cedra
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljen Cedra :)

najprej hvala za vaš trud.

torej takole:

tiste celice,ki so označene(list1) ,naj prekopira v txt datoteko.
(pravilno ste predvidevali,kajti ne bo vedno enako območje celic).
ta makro bom nato pripel v BEFORE CLOSE.torej,bi se kopiralo pri zaprtju zvezka.no,meni niti snemanje tega makra ne uspe. :( :?:
upam,da mi boste še pomagali.
za vaš odgovor se najlepše zahvaljujem.

lp rick
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Tole sem spravil skupaj:

Koda: Izberi vse

Sub Zapis_v_tekst_datoteko()
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
        Selection.Copy
            ChDir "C:\"
        Workbooks.OpenText Filename:="C:\Podatki.txt", Origin:=932, StartRow:=1, _
            DataType:=xlDelimited, TextQualifier:=xlNone, ConsecutiveDelimiter:=False _
            , Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:= _
            False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
            TrailingMinusNumbers:=True
        ActiveSheet.Range("A65536").End(xlUp).Offset(1, 0).Select
        ActiveSheet.Paste
        ActiveWorkbook.Save
        ActiveWindow.Close
        Application.CutCopyMode = False
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True

End Sub
Preizkusite zgornjo kodo!
Deluje pa tako, da tisto kar boste označili oz. selektirali, se vam bo zapisalo v txt datoteko "Podatki" na C-ju, kjer se že zapisuje kdaj je bil zvezek odprt. Kot sem že zapisal v prejšnem prispevku, ne vem, če vam bo zapis v txt datoteki oblikovno ustrezal. Opazil sem še nekaj, da pri ponovnem zapisu vse šičnike in šumnike spremeni v druge znake (?), vsaj meni jih. Morda bo pri vas drugače. Zakaj to naredi pa je že vprašanje za koga bolj usposobljenega, meni žal zmanjka! :oops:
Morda bi bilo kodo boljše pripeti na kakšen Gumb, kot pa na Before close.

Upam, da sem vam kljub temu kaj pomagal... :roll:

lp,

cedra
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljen

sem že mislil,da ste pozabili name.....,potem pa presenečenje...

vaša koda je ODLIČNA,podatki se lepo shranjujejo in sem zelo zadovoljen :D . THANKS
zaenkrat sem vse skupaj res pripel na gumb,ampak to ni več problem.
glavno,da deluje.
P.S.ni mi jasno,kako ste posneli ta makro..

LP rick
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Pozdravljeni

Ja malo dlje je trajalo, saj veste 1. maj, pa prosti dnevi...
rick napisal/-a: P.S.ni mi jasno,kako ste posneli ta makro..
Naj odgovorim. makro sem prvo posnel, zbrisal nepotrebno in dodal, napisal vrstice kode, ki se mi zdijo potrebne. Naj najprej povem, da je moja koda čisto amaterska, saj to tudi sem, saj se tega lotevam povsem ljubiteljsko in bi se verjetno kakšen profi programer, zgrozil nad kodo. Zavedam se, da je napisana brez vseh spremenljivk, ki bi jih profi vedel kam in kako postaviti v kodo. Je žal tako, da sem malo starejši in takrat, ko sem hodil v šolo, o računalništvu, programiranju ni bilo niti govora... :cry: No, glavno da dela

Poizkusil vam bom razložiti kodo:
makro kopira kar ste označili na poljubnem listu, nato odpre in uvozi txt file , v vašem primeru "Podatki", v Excel na poseben list, poišče zadnjo polno vrstico v koloni "A", se pomakne za eno vrstico navzdol in prilepi kar ste kopirali. Zapre txt file in makro je končan! :)

podrobneje:

Koda: Izberi vse

Application.ScreenUpdating = False 
' dodano, da se prepreči osveževanje ekrana, da ne miglja in ne kaže kaj sploh makro dela. Tudi izvajanje je zaradi tega hitrejše


    Application.DisplayAlerts = False 
' dodano, to je zato, da Excel pri zapiranju txt fila ne teži z oknom o potrjevanju sprememb v txt filu, pa tudi makro bi se ustavil, dokler ne potrdite ali prekličete okna o spremembah


        Selection.Copy 
' posneto, kopiranje izbranega


            ChDir "C:"
        Workbooks.OpenText Filename:="C:\Podatki.txt", Origin:=932, StartRow:=1, _
            DataType:=xlDelimited, TextQualifier:=xlNone, ConsecutiveDelimiter:=False _
            , Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:= _
            False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
            TrailingMinusNumbers:=True 
'posneta klobasa, kjer excel sprašuje, kako, na kakšen način naj se podatki txt fila, prenesejo na začasni list. Verjetno veliko stvari nepotrebnih, oz bi jih lahko spustili, če točno veš kaj potrebuješ


        ActiveSheet.Range("A65536").End(xlUp).Offset(1, 0).Select
'dodano, iskanje zadnje polne vrstice v koloni A in pomik za eno vrstico navzdol


        ActiveSheet.Paste
        ActiveWorkbook.Save
        ActiveWindow.Close
        Application.CutCopyMode = False
'posneto, verjetno vam je jasno, kaj pomenijo


        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
'dodano, osveževanje ekrana spet vključimo, ravno tako tudi vsa pojavna okna, opozorila in konec 
Upam, da vam je sedaj bolj jasno in da sem vam razumljivo razložil kako in kaj
Žilica mi ni dala miru in na netu sem našel, kako se stvari lotevajo profiji. Kodo bom prilepil popoldne, ker jo nimam na tem PC na katerem pišem. In lahko boste primerjali...:D
Jao, koliko sem se razpisal, upam da ne bom kregan od admina...

lp,

cedra
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljen :)

lepo ste tole vse napisali,naj vas pri tem potolažim ,da tudi sam nisem več tako rosno mlad.nekateri bi zagotovo rekli,da to ni opravičilo...kar se tiče makrojev,pa sem še bolj "kratek"kot
vi,sam zagotovo tega nebi spravil skupaj.snemanje na samim excel listu mi še nekako gre,ko pa grem v txt datoteko pa me ustavi,nevem zakaj.pom pregruntal vašo zadevo.
zaenkrat pač ne znam.no,da se tudi sam ne bom preveč "razpisal",bi se še enkrat
zahvalil za vašo izčrpno razlago.upam ,da si bomo še "helpali". :)

lp rick

ps:kje na netu ste našli ,kako profiji strežejo tej stvari? :?:
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Obljuba dela dolg:

Za vaš problem sem našel na netu kodo, ki sem jo malce spremenil na dveh, treh mestih, da je ustrezna vaši želji:

Koda: Izberi vse

Public Sub ExportToTextFile(FName As String, _
    Sep As String, SelectionOnly As Boolean)
    
'Kodo našel  na:
    'http://www.cpearson.com/excel/imptext.htm
'in malenkost priredil!

Dim WholeLine As String
Dim FNum As Integer
Dim RowNdx As Long
Dim ColNdx As Integer
Dim StartRow As Long
Dim EndRow As Long
Dim StartCol As Integer
Dim EndCol As Integer
Dim CellValue As String


Application.ScreenUpdating = False
On Error GoTo EndMacro:
FNum = FreeFile

If SelectionOnly = True Then
    With Selection
        StartRow = .Cells(1).Row
        StartCol = .Cells(1).Column
        EndRow = .Cells(.Cells.Count).Row
        EndCol = .Cells(.Cells.Count).Column
    End With
Else
    With ActiveSheet.UsedRange
        StartRow = .Cells(1).Row
        StartCol = .Cells(1).Column
        EndRow = .Cells(.Cells.Count).Row
        EndCol = .Cells(.Cells.Count).Column
    End With
End If

Open FName For Append As #FNum

For RowNdx = StartRow To EndRow
    WholeLine = ""
    For ColNdx = StartCol To EndCol
        If Cells(RowNdx, ColNdx).Value = "" Then
            CellValue = ""
        Else
           CellValue = Cells(RowNdx, ColNdx).Text
        End If
        WholeLine = WholeLine & CellValue & Sep
    Next ColNdx
    WholeLine = Left(WholeLine, Len(WholeLine) - Len(Sep))
    Print #FNum, WholeLine
Next RowNdx

EndMacro:
On Error GoTo 0
Application.ScreenUpdating = True
Close #FNum

End Sub
Zgornje kode ne boste videli med makri (ALT+ F osem), in tudi zagnati je ne morete direktno (F5), ampak jo zaženete s spodnjim makrom!

Koda: Izberi vse

Sub Zapisovanje_v_txt_file()
    ExportToTextFile "c:\Podatki.txt", " < > ", False
End Sub
Sedaj pa lahko malo experimentirate; v vrstici:

Koda: Izberi vse

ExportToTextFile "c:\Podatki.txt", " < > ", False
lahko spremenite ime txt datoteke, kjer se naj podatki zapišejo; če datoteka še ne obstaja, se ustvari. Med obema narekovajema spreminjate izgled znakov seperatorja (trenutno <>), lahko naredite samo par presledkov in znakov ne bo, ampak le prazen prostor med zapisi v txt datoteki. Najbolj zanimiv pa je tisti False, ki ga lahko spremenite v True;
če je tako kot zdaj: False, potem vam bo v txt datoteko pripel vse podatke na listu, če pa False spremenite v True, pa vam bo v txt datoteko vstavil samo podatke, ki jih boste označili. Torej po želji... :)
Original kodo si lahko ogledate na strani, ki zapisana med kodo in primerjajte z malenkostno popravljeno zgoraj :roll:
Če bi še vedno želeli pripeti stvar na Before close, pa prilepite tole:

Koda: Izberi vse

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Zapisovanje_v_txt_file
End Sub
To bi bilo vse, pa kaj poročajte kako se obnese profi varianta in ali vam ustreza! :wink:

lp,

cedra
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljen :)

uh,cedra sedaj pa ste mi dali za misliti,res zanimiva koda,dobro ste potem
vse tole uporabili.ogledal sem si tudi spletno stran,ki se mi tudi zdi zanimiva.moje sive celice......
še enkrat bi se vam zahvalil,morda pa mi le ostane kaj v glavi. :?
upanje umre zadnje. :)

lp rick
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Kot sem že napisal, zanimajo me vaše izkušnje z makrom, mojim ali profi varianta. Želel sem samo prikazati razliko med profi in amatersko rešitvijo problema! Sicer pa, kot je že napisal "admin" v knjigi, ne spomnim se točnega naslova, zato ga tudi ne bom navajal:("Snemajte, snemajte...in še enkrat snemajte)
lp.

cedra
rick
Prispevkov: 216
Pridružen: So Feb 17, 2007 9:18 pm

Odgovor Napisal/-a rick »

pozdravljen cedra :)
seveda,seveda,snemanje,to še nekako gre...
ko sva se že toliko "zmenla",bi imel še eno podvprašanje glede prenosa
podatkov iz excela v txt.
poznate morda ukaz,ki bi vse podatke,ki so že v datoteki txt izbrisal in nato prilepil to, kar sem nazadnje izbral in kopiral?torej zanimajo me le
zadnji podatki,predhodni pa,kot sem že rekel naj se izbrišejo.
to bi bilo nekakšno osveževanje podatkov.seveda bi to sedaj rabil za nekaj povsem drugega.če imate idejo,bi je bil zelo vesel.
sicer pa,pomagali ste mi že toliko,da mi je kar malce nerodno...
za vaš trud se vam zahvaljujem.

lp rick
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Nič lažjega: V profi varianti spodnjo vrstico zamenjajte, oz še bolje spremenite vrstico

Koda: Izberi vse

Open FName For Append As #FNum
v opombo(z opuščajem pred vrstico) in tja prilepite še tole vrstico:

Koda: Izberi vse

Open FName For Output Access Write As #FNum
Zdaj lahko izbirate kako se bo zapisovalo, ali se bo dodajalo ali pa prepisovalo..:wink: odvisno katero vrstico boste dali v "opombo"!

lp,

cedra
Odgovori