Avatar billede mrkr Juniormester
25. juli 2010 - 17:12 Der er 6 kommentarer og
1 løsning

Importere data fra flere filer i en mappe

Jeg har et ark hvor jeg manuelt importerer data ind i, fra nogle kommaseparerede filer der alle ligger i mappen c:\import\

Kan det lade sig gøre at lave en kode der importerer data fra alle de filer der ligger i mappen c:\import\

Herefter ville det være super hvis filerne kunne flyttes til c:\import\ErImporteret\

så man ikke kommer til at indlæse dataene mere end en gang.

Alle filerne hedder .txt til efternavn.

Dataene som importeres i arket skal importeres så de bliver indsat efter hinanden i arket IMPORT

Når jeg optager en makro over min import ser den ud som vist nedenfor, men det løser desværre ikke mit problem med at der skal indlæses fra flere filer.

Er der nogen der kender til en sådan løsning.

Sub imp()
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;c:\import\kladde.txt", Destination:=Range("$A$1"))
        .Name = "kladde"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
Avatar billede supertekst Ekspert
25. juli 2010 - 17:22 #1
Ja - men har ikke tid lige nu...
Avatar billede gnowak Nybegynder
26. juli 2010 - 22:16 #2
Til første spørgsmål.

Du kan starte med at lave en løkke der kigger i mappen via kommandoen DIR. Derefter laver du en løkke der angiver hvert navn i din importfunktion.

Det kan anbefales at importere i en liste (array), som er langt hurtigere og du kan nemmere overskue hvor meget du har importeret.
Avatar billede mrkr Juniormester
11. august 2010 - 22:20 #3
Hej Gnowak

tak for tipppet.
Mit problem er bare at jeg ikke kan finde ud af at lave løkker og indlæse i en array :-)

Når jeg ser koder fra jer experter kan jeg som regel finde ud af at lave mindre rettelser selv, men jeg kan under ingen omstændigheder finde ud af at bygge en kode som denne op fra bunden, desværre.
Avatar billede supertekst Ekspert
16. august 2010 - 11:59 #4
REM Sub "ImporterEnFil" skal tilpasses iflg. din spec.

Const importMappeNavn = "C:\Import\"
Const erImporteretMappeNavn = "C:\ErImporteret\"

Public Sub importer()
Dim fs, f, f1, fc
Dim filSti As String, filNavn As String, indsætIcelle As String, ræk As Long

Rem traverser import-mappen
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(importMappeNavn)
    Set fc = f.Files
   
    For Each f1 In fc
        filNavn = f1.Name
        filSti = f1.Path
        ræk = Range("A65536").End(xlUp).Row
        If ræk > 1 Then
            ræk = ræk + 1
        End If
       
        indsætIcelle = "$A$" & CStr(ræk)
       
        importerEnFil filSti, filNavn, indsætIcelle
    Next
   
    flytImporteredeFiler
   
    MsgBox "Import er udført"
End Sub
Private Sub importerEnFil(filSti, filNavn, indsætIcelle)
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & filSti _
        , destination:=Range(indsætIcelle))
        .Name = filNavn
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 932
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
Private Sub flytImporteredeFiler()
Dim fs, f, f1, fc
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(importMappeNavn)
    Set fc = f.Files
   
    For Each f1 In fc
        FileCopy importMappeNavn & f1.Name, erImporteretMappeNavn & f1.Name
        Kill importMappeNavn & f1.Name
    Next
End Sub
Avatar billede supertekst Ekspert
26. august 2010 - 18:07 #5
Var det en løsning???
Avatar billede mrkr Juniormester
21. oktober 2010 - 15:29 #6
Så fik endelig tid til at sætte mig ned og teste på det.
Det virker fuldstændig som det skal.

Beklager den lange svartid, men jeg har været arbejdet alt alt for meget i den sidste tid :-(

Mange tak for hjælpen.
Avatar billede supertekst Ekspert
21. oktober 2010 - 15:38 #7
Ok & Selv tak..
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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