Avatar billede saxtus Nybegynder
17. februar 2006 - 22:45 Der er 6 kommentarer og
1 løsning

Oprettelse af ascii filer ved hjælp af variabel i program

Hej Eksperter...

Så er den gal igen ;-)

Jeg skal ha min makro til at oprette en fil afhængigt af indholdet i en linie.

Det vil sige at den nedenstående tekst bliver delt op i 3 filer
050106
050106
050106
060106
060106
060106
070106
070106
070106
.....

Altså en fil for 050106, 060106 og 070106.

Jeg har ikke helt fundet ud af måden det skal gøres på endnu, men har da fundet ud af hvordan man opretter en fil og skriver til den, men det med at lave en lykke og få det til at virke på en snedig måde har jeg ikke fundet ud af endnu.

Har 2 idér, den ene er med at åbne og lukke tekstfilen for hver linie. Den anden er at den tager og sammenligner med resultatet.

Er der nogle der har et godt bud på en løsning??

Jeg skriver til filen på følgende måde

Sub SkrivTilStamdata()
  Open "c:\test\stamdata.dat" For Output As #1
  antal = Sheets("Data").Range("b13") - 1
  Print #1,
  For i = 1 To antal
    linie = "0000" & Sheets("ark2").Range("a" & i)
    linie = linie & ",00000" & Sheets("ark2").Range("d" & i)
    Print #1, linie
  Next i
  Close #1
End Sub
Avatar billede joern Nybegynder
18. februar 2006 - 11:36 #1
Hej.

Hvis posterne er i nummerorden, kan du jo skrive til én fil ad gangen, men det kan sagtens gøres selv om de står blandet mellem hinanden.

Du åbner bare 3 filer samtidig og sætter et kriterie på de to første tegn i din variabel, kriteriet bestemmer hvilken af de 3 filer, der skrives til.

Open "c:\test\stamdata1.dat" For Output As #1
Open "c:\test\stamdata2.dat" For Output As #2
Open "c:\test\stamdata3.dat" For Output As #3
  antal = Sheets("Data").Range("b13") - 1
  Print #1,
  For i = 1 To antal
    linie = "0000" & Sheets("ark2").Range("a" & i)
    linie = linie & ",00000" & Sheets("ark2").Range("d" & i)

    if left(dinvar,2) = "05" then print #1, linie      'dinvar er din variabel
    if left(dinvar,2) = "06" then print #2, linie 
    if left(dinvar,2) = "07" then print #3, linie

  Next i
  Close #1
  Close #2
  Close #3
Avatar billede saxtus Nybegynder
18. februar 2006 - 12:10 #2
Tror at jeg glemte at skrive at filnavnet skal være de tal (datoen)

Jeg ved hvor mange linier jeg skal eksportere til filerne, men ved ikke hvor mange af hver dato der er.
Avatar billede kabbak Professor
18. februar 2006 - 13:09 #3
Hvor har du datoerne stående ?
Hvor har du de værdier der skal gemmes ?
Skal der tilføjes i filen, eller skal der kun nye i ?
Skal den kun have datoen som filnavn, eller skal den hedde 070106stamdata.dat ?
Hvorfor en tom linie først ?
Avatar billede bak Forsker
18. februar 2006 - 15:45 #4
Sub SkrivTilStamdata()
Dim FNo As Long
Dim temp As Variant
Dim antal As Long
Dim linie As String
Dim i As Long
  antal = Sheets("Data").Range("b13") - 1
  temp = Sheets("ark2").Range("a1")
  FNo = FreeFile
  Open "c:\test\" & CStr(temp) & ".dat" For Output As #FNo
  Print #FNo,
  For i = 1 To antal
      If Sheets("ark2").Range("a" & i) <> temp Then
        Print #FNo,
        Close #FNo
        FNo = FreeFile
        temp = Sheets("ark2").Range("a" & i)
        Open "c:\test\" & CStr(temp) & ".dat" For Output As #1
        Print #FNo,
      End If

      linie = "0000" & Sheets("ark2").Range("a" & i)
      linie = linie & ",00000" & Sheets("ark2").Range("d" & i)
      Print #FNo, linie
  Next i
  Close #FNo
End Sub
Avatar billede bak Forsker
18. februar 2006 - 15:51 #5
Jeg vil lige tilføje at dine data SKAL være sorteret på kolonne A, ellers mister du nogle, idet en fil så risikerer at blive overskrevet
Avatar billede saxtus Nybegynder
06. marts 2006 - 11:32 #6
Bak - bare send et svar, det virker helt perfekt
Avatar billede bak Forsker
06. marts 2006 - 19:20 #7
ok :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester