Avatar billede moso Nybegynder
27. november 2008 - 12:51 Der er 8 kommentarer og
1 løsning

Hvordan importeres flere text-filer i excel

Jeg har behov for at importere flere .txt-filer til excel. Jeg har ingen problemer med at importere dem enkeltvis, men da der er mange filer (+150) leder jeg efter hjælp til hvordan jeg kan autimatisere denne import, gerne vha VBA. Nogen forslag?
De har ikke samme struktur, men er alle tabulator separeret.
Avatar billede moso Nybegynder
27. november 2008 - 12:51 #1
Avatar billede kabbak Professor
27. november 2008 - 13:23 #2
Public Sub Hent_filer()
    Dim FileFind() As Variant, X As Integer, MyPath As String, MyName As String, Res As Variant
    Dim I As Long, Fil As String, Linje As String
    X = 0
    MyPath = "c:\Data\"    'Ret til din sti.
    MyName = Dir(MyPath & "*.txt", vbDirectory)    ' Retrieve the first entry.
    ReDim FileFind(X)
    FileFind(X) = MyName
    Do While MyName <> ""    ' Start the loop.
        X = X + 1
        ReDim Preserve FileFind(X)
        ' Ignore the current directory and the encompassing directory.
        If MyName <> "." And MyName <> ".." Then
            ' Use bitwise comparison to make sure MyName is a directory.
        End If
        MyName = Dir    ' Get next entry.
        FileFind(X) = MyName
    Loop

    For X = 0 To UBound(FileFind) - 1

        Fil = Split(FileFind(X), ".")(0)
        Worksheets.Add
        ActiveSheet.Name = Fil

        Open MyPath & FileFind(X) For Input As #1
        I = 1
        Do Until EOF(1)
            Line Input #1, Linje
            If Linje <> "" Then
                Res = Split(Linje, vbTab)
                Range(Cells(I, 1), Cells(I, UBound(Res) + 1)) = Res
                I = I + 1
            End If
        Loop
        Close 1
    Next
End Sub
Avatar billede moso Nybegynder
27. november 2008 - 14:23 #3
Takker, smider du ikke et svar så du kan få point?
Jeg har et sidste problem.
Data med komma gemmes med "" omkring:

45,6 gemmes som "45,6", hvilket giver mig lidt udfordringer. Kan det ændres? Det skal gemmes uden ""...
Avatar billede kabbak Professor
27. november 2008 - 14:56 #4
Public Sub Hent_filer()
    Dim FileFind() As Variant, X As Integer, MyPath As String, MyName As String, Res As Variant
    Dim I As Long, Fil As String, Linje As String
    X = 0
    MyPath = "c:\Data\"    'Ret til din sti.
    MyName = Dir(MyPath & "*.txt", vbDirectory)    ' Retrieve the first entry.
    ReDim FileFind(X)
    FileFind(X) = MyName
    Do While MyName <> ""    ' Start the loop.
        X = X + 1
        ReDim Preserve FileFind(X)
        ' Ignore the current directory and the encompassing directory.
        If MyName <> "." And MyName <> ".." Then
            ' Use bitwise comparison to make sure MyName is a directory.
        End If
        MyName = Dir    ' Get next entry.
        FileFind(X) = MyName
    Loop

    For X = 0 To UBound(FileFind) - 1

        Fil = Split(FileFind(X), ".")(0)
        Worksheets.Add
        ActiveSheet.Name = Fil

        Open MyPath & FileFind(X) For Input As #1
        I = 1
        Do Until EOF(1)
            Line Input #1, Linje
            Linje = Replace(Linje, ",", ".") ' erstatter komma med punktum
            If Linje <> "" Then
                Res = Split(Linje, vbTab)
                Range(Cells(I, 1), Cells(I, UBound(Res) + 1)) = Res
                I = I + 1
            End If
        Loop
        Close 1
    Next
End Sub
Avatar billede moso Nybegynder
27. november 2008 - 15:49 #5
Desværre er tilgangen ikke den bedste. I det tilfælde at jeg har tekst med komma, vil den også erstatte dette, ligesom tal med formatet 4.199,99 vil blive til 4.199.99 som igen vil give en fejl...
Mon der er en metode til at sikre at indholdet ikke ændres?
Avatar billede kabbak Professor
27. november 2008 - 16:56 #6
når man indlæser tal via makro, skal det være komma, som tusindstal adskillelse og punktum som decimal.
Avatar billede moso Nybegynder
27. november 2008 - 17:08 #7
Ok - men det hjælper ikke på tekstindhold mv. Jeg har ikke kontrol over importens data, dvs. det kan være tekst eller tal. Jeg prøver at se på hvor står konsekvens det har. Indtil da: Takker for din hjælp (igen)
Avatar billede kabbak Professor
28. november 2008 - 08:43 #8
Prøv at teste denne, den skriver kun i A kolonnen, derefter bruger den Excels indbyggede, Tekst til kolonner.

Public Sub Hent_filer()
    Dim FileFind() As Variant, X As Integer, MyPath As String, MyName As String, Res As Variant
    Dim I As Long, Fil As String, Linje As String
    X = 0
    MyPath = "c:\Data\"    'Ret til din sti.
    MyName = Dir(MyPath & "*.txt", vbDirectory)    ' Retrieve the first entry.
    ReDim FileFind(X)
    FileFind(X) = MyName
    Do While MyName <> ""    ' Start the loop.
        X = X + 1
        ReDim Preserve FileFind(X)
        ' Ignore the current directory and the encompassing directory.
        If MyName <> "." And MyName <> ".." Then
            ' Use bitwise comparison to make sure MyName is a directory.
        End If
        MyName = Dir    ' Get next entry.
        FileFind(X) = MyName
    Loop

    For X = 0 To UBound(FileFind) - 1

        Fil = Split(FileFind(X), ".")(0)
        Worksheets.Add
        ActiveSheet.Name = Fil

        Open MyPath & FileFind(X) For Input As #1
        I = 1
        Do Until EOF(1)
            Line Input #1, Linje
            Cells(I, 1) = Linje
            I = I + 1
        Loop
        Close 1

        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
                                TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
                                Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
                                                                                          :=Array(1, 1), TrailingMinusNumbers:=True
    Next
End Sub
Avatar billede moso Nybegynder
28. november 2008 - 09:40 #9
Måske det ligger i eksporten af data.
Bruger denne kode:

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each ws In ThisWorkbook.Worksheets
       
       
            Sheets(ws.Name).Select
            Sheets(ws.Name).Copy
            ActiveWorkbook.SaveAs Filename:= _
            sBuffer & "\" & ws.Name & "", _
            FileFormat:=xlText, CreateBackup:=False
            ActiveWorkbook.Close
            ThisWorkbook.Activate
            Columns(LastColumn).Delete /bruges til at slette sidste kolonne.
    Next


Jeg kan se at din kode virker fint, men desværre er mit output stadig ikke korrekt.
Mener at fejlen ligger i at det køres som en Macro. Hvis jeg manuelt gemmer som txt er der ikke nogen forskel - men hvis jeg inspiller samme arbejdsgang som Macro og derefter kører den, så ændre alle kommaerne til punktum!
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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