Avatar billede magmat Nybegynder
25. december 2006 - 12:21 Der er 12 kommentarer og
1 løsning

Importere data fra ekstern fil

Jeg vil meget gerne importere data fra en ekstern fil.
I filen er der ca. 1000 liner, men jeg vil kun have de første 10 liner ind i mit ark.

JEg kan kun finde udaf at importere ALLE data i mit ark. Er der nogen der kan hjælpe mig med at begrænse importen til de første 10 liner?

Jeg har lavet følgende makro:

Sub imp3()
'
' imp3 Makro
' Makro indspillet 25-12-2006 af Alle
'

'
    ActiveWorkbook.Worksheets.Add
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\eksternfil.txt", _
        Destination:=Range("A1"))
        .Name = "eksternfil"
        .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 = xlFixedWidth
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1)
        .TextFileFixedColumnWidths = Array(5, 3, 31, 17, 12, 30)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
Avatar billede magmat Nybegynder
25. december 2006 - 13:14 #1
Det skal lige til orientering siges at makroen blot er en "optagelse" af hvad jeg har gjort ved improrten
Avatar billede kabbak Professor
26. december 2006 - 16:36 #2
Public Sub ImporterTekst()
    Dim StrLinie As String, I As Integer, Ud As Variant
    ActiveWorkbook.Worksheets.Add
    Open "C:\eksternfil.txt" For Input As #1
    For I = 1 To 10
        Line Input #1, StrLinie
        Ud = Split(StrLinie, vbTab)
        Range(Cells(I, 1), Cells(I, UBound(Ud) + 1)) = Ud
    Next
    Close #1
End Sub
Avatar billede kabbak Professor
26. december 2006 - 16:50 #3
Nu med lidt forklaring

Public Sub ImporterTekst()
    Dim StrLinie As String, I As Integer, Ud As Variant, C As Range
    ActiveWorkbook.Worksheets.Add
    Open "C:\eksternfil.txt" For Input As #1
    For I = 1 To 10
        Line Input #1, StrLinie
        Ud = Split(StrLinie, vbTab) ' splitter linien op i kolonner
        Range(Cells(I, 1), Cells(I, UBound(Ud) + 1)) = Ud ' skriver i cellerne
        If EOF(1) Then Exit For ' hopper ud hvis der er mindre end 10 linier i filen
    Next
    Close #1
   
    Range("A2").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    For Each C In Selection
        C = C * 1 ' laver tal som opfattes som tekst om til talværdier
    Next
        Selection.EntireColumn.AutoFit ' automatisk tilpasning af kolonner
        Range("A1").Select
End Sub
Avatar billede magmat Nybegynder
26. december 2006 - 22:31 #4
Det virker ikke helt for mig.

Første gang jeg kører koden får jeg fejl 400
Anden gang jeg kører den får jeg fejl "fil allerede åbn"
Avatar billede kabbak Professor
26. december 2006 - 23:18 #5
hvilken linie markeres ved fejl 400, du skal vælge Debug, ved fejlmeldingen

Er tekstfilen ikke tabulatorsepareret. ??

Nr 2 fejl kommer fordi den ikke fik lukket i første forsøg
Avatar billede kabbak Professor
26. december 2006 - 23:37 #6
I min excel betyder Fejl 400

Form already displayed; can't show modally (Error 400)

I min kode er der ikke nogen form
Avatar billede magmat Nybegynder
27. december 2006 - 20:27 #7
Nej filen er desværre ikke kommasepareret.
Den er seperaret ved faste kolonne størrelser

I den makro jeg har indspillet viser koden
.TextFileFixedColumnWidths = Array(5, 3, 31, 17, 12, 30)

ved dog ikke at det er noget der hjælper
Avatar billede kabbak Professor
27. december 2006 - 21:16 #8
Public Sub ImporterTekst()
    Dim StrLinie As String, I As Integer, Ud As Variant, C As Range
    ActiveWorkbook.Worksheets.Add
    Open "C:\eksternfil.txt" For Input As #1
    For I = 1 To 10
        Line Input #1, StrLinie
        Cells(I, 1) = Mid(StrLinie, 1, 5)
        Cells(I, 2) = Mid(StrLinie, 6, 3)
        Cells(I, 3) = Mid(StrLinie, 9, 31)
        Cells(I, 4) = Mid(StrLinie, 41, 17)
        Cells(I, 5) = Mid(StrLinie, 60, 12)
        Cells(I, 6) = Mid(StrLinie, 72, 30)
        If EOF(1) Then Exit For    ' hopper ud hvis der er mindre end 10 linier i filen
    Next
    Close #1
    Range("A2").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    For Each C In Selection
        C = C * 1    ' laver tal som opfattes som tekst om til talværdier
    Next
    Selection.EntireColumn.AutoFit    ' automatisk tilpasning af kolonner
    Range("A1").Select
End Sub

prøv denne
Avatar billede familienriis Nybegynder
27. december 2006 - 21:45 #9
jep, nu begynder der at komme data.

De data jeg henter ind er skrevet i dos-8 (det har jeg i hvert tilfælde valgt ved den makro jeg har lavet ovenfor)
Hvis der ikke gøres opmærksom på dette kommer æøå ikke korrekt ind i excel.
Desuden skal importen helst ske i det aktive ark og ikke i et nyt :-)
Avatar billede kabbak Professor
27. december 2006 - 22:50 #10
Jeg kan ikke lige finde ud af hvordan man i Open kommandoen , kan fortælle at den skal bruge 850, som karaktersæt.

For st den skal ske i det aktive ark, fjerner du bare denne linie

  ActiveWorkbook.Worksheets.Add
Avatar billede familienriis Nybegynder
27. december 2006 - 23:17 #11
Det er også helt ok, alt det andet virker, når jeg fjerner linien
  ActiveWorkbook.Worksheets.Add

Mange tak for hjælpen
Avatar billede familienriis Nybegynder
27. december 2006 - 23:17 #12
Smider du lige et svar :-)
Avatar billede kabbak Professor
27. december 2006 - 23:20 #13
tak for point ;-))
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