Avatar billede mvhansen Nybegynder
02. marts 2006 - 22:02 Der er 31 kommentarer og
1 løsning

Hendt txtfil ind i excel med macro

Hej eksperter
Er der en der kan hjælpe mig med at hente en txt fil ind i excel.
det skal være med en macro,
og text.txt filen ligger i samme mappe som excel filen.
jeg har prøvet men denne kode, den hendter hele linjeren ind i første celle

Public Sub TxtFilTest6()
Dim FilNummer As Integer
Dim FilNavn As String
Dim Linje As String

'Unikt filnummer findes
FilNummer = FreeFile
FilNavn = "F:\mvh\Excel\VBA Excel\mvh.txt"

Open FilNavn For Input As #FilNummer
  Do
    'Henter en linje ad gangen
  Line Input #FilNummer, Linje
    Range("A1").Value = Linje
    Line Input #FilNummer, Linje
    Range("A2").Value = Linje
    Line Input #FilNummer, Linje
    Range("A3").Value = Linje
    Line Input #FilNummer, Linje
    Range("A4").Value = Linje
    Line Input #FilNummer, Linje
    Range("A5").Value = Linje
   
Loop Until EOF(FilNummer)
Close #FilNummer
End Sub


for vær mellem rum der er i textfilen vandret skal den skift celle
når der ikke er mere text vandret skal den skifte
linje
kan man lave hvad for en celle den skal begynde i
eksempel i
b3-c3-d3-e3
b4-c4-d4-e4
b5-c5-d5-e5
også vider


mvh

mvhansen
Avatar billede kabbak Professor
02. marts 2006 - 22:20 #1
Public Sub TxtFilTest6()
Dim FilNummer As Integer
Dim FilNavn As String
Dim Linje As String
Dim X
Dim I As Integer
Dim R As Long
'Unikt filnummer findes
FilNummer = FreeFile
FilNavn = "F:\mvh\Excel\VBA Excel\mvh.txt"
R = 1
Open FilNavn For Input As #FilNummer
  Do
    'Henter en linje ad gangen
  Line Input #FilNummer, Linje
  X = Split(linie, " ")
  For I = 0 To UBound(linie)
  Range("A" & R).Offset(0, I) = X(I)
  Next
  R = R + 1
Loop Until EOF(FilNummer)
Close #FilNummer
End Sub
Avatar billede kabbak Professor
02. marts 2006 - 22:22 #2
R = 1
er rækken den starter i

Range("A" & R).Offset(0, I) = X(I)
A er kolonnen den starter i
Avatar billede mvhansen Nybegynder
02. marts 2006 - 22:30 #3
Hej  kabbak
Jeg får denne fejl
macroen 'mvh.xls!hent_txtfil blev ikke fundet

mvh

mvhansen
Avatar billede bak Forsker
02. marts 2006 - 22:30 #4
Her er et bud, men er du sikker på at den er mellemrumsseparetret. Det normale ville være tab-separeret og så skal den se lidt anderledes ud.

Er faktisk lidt ked af at du vil have en makro, der findes nemmere og bedre metoder uden makro :-)
Avatar billede bak Forsker
02. marts 2006 - 22:31 #5
Public Sub TxtFilTest6()
Dim FilNummer As Integer
Dim FilNavn As String
Dim Linje As String
Dim S As Variant
Dim x As Long

'Unikt filnummer findes
FilNummer = FreeFile
FilNavn = "c:\mappe1.txt"

Open FilNavn For Input As #FilNummer
  Do
    'Henter en linje ad gangen
  x = x + 1
  Line Input #FilNummer, Linje
  S = Split(Application.WorksheetFunction.Trim(Linje), " ")
  Range("A" & x).Resize(, UBound(S)) = S
Loop Until EOF(FilNummer)
Close #FilNummer
End Sub
Avatar billede bak Forsker
02. marts 2006 - 22:33 #6
dohh, havde ikke lige opdateret og set kabbaks kode. De er jo stort set ens :-)
mvhansen -> du kalder en forkert makro (navnet er ikke rigtigt) , derfor fejlen
Avatar billede mvhansen Nybegynder
02. marts 2006 - 22:34 #7
Kan man ikke lave dette om
F:\mvh\Excel\VBA Excel\mvh.txt
så man kan flytte excel filen og textfile
uden at skal lave vejen til textfilen om
de vil altid ligge i samme mappe

mvh

mvhansen
Avatar billede kabbak Professor
02. marts 2006 - 22:34 #8
> macroen 'mvh.xls!hent_txtfil blev ikke fundet

den hedder jo også

TxtFilTest6
Avatar billede kabbak Professor
02. marts 2006 - 22:36 #9
FilNavn = ThisWorkbook.Path & "\mvh.txt"
Avatar billede bak Forsker
02. marts 2006 - 22:43 #10
Selvom kabbaks kode er først og ok, vil jeg da lige benytte muligheden for at komme med en rettelse til min egen.
Range("A" & x).Resize(, UBound(S)) = S
ændres til
Range("A" & x).Resize(, UBound(S) + 1) = S
Avatar billede kabbak Professor
02. marts 2006 - 22:46 #11
jaa, bak, man skal huske at den første er 0,i S ;-))
Avatar billede bak Forsker
02. marts 2006 - 22:49 #12
Ja, og med varianter hjælper ingen OPTION BASE 1  :-)
Avatar billede mvhansen Nybegynder
02. marts 2006 - 22:52 #13
Kabbak din melder fejl
Run-time error '13'
type mismatch

ved  For I = 0 To UBound(linie)


Public Sub Hent_proe_txt()
Dim FilNummer As Integer
Dim FilNavn As String
Dim Linje As String
Dim X
Dim I As Integer
Dim R As Long
'Unikt filnummer findes
FilNummer = FreeFile
FilNavn = ThisWorkbook.Path & "\mvh.txt"
R = 1
Open FilNavn For Input As #FilNummer
  Do
    'Henter en linje ad gangen
  Line Input #FilNummer, Linje
  X = Split(linie, " ")
  For I = 0 To UBound(linie)
  Range("A" & R).Offset(0, I) = X(I)
  Next
  R = R + 1
Loop Until EOF(FilNummer)
Close #FilNummer

End Sub

mvh

mvhansen
Avatar billede kabbak Professor
02. marts 2006 - 22:54 #14
X = Split(linie, " ")
skal være

X = Split(Linje, " ")
Avatar billede kabbak Professor
02. marts 2006 - 22:55 #15
og denne
For I = 0 To UBound(linie)

For I = 0 To UBound(linje)

Undskyld
Avatar billede mvhansen Nybegynder
02. marts 2006 - 22:56 #16
Det ville være rat hvis man kan stille  hvadfor en cele
man vil starte i fordi jeg har en overskrift
din kabbak hvis den ikke melder fejl kan den stilles på

mvh

mvhansen
Avatar billede kabbak Professor
02. marts 2006 - 22:57 #17
Hele koden


Public Sub Hent_proe_txt()
Dim FilNummer As Integer
Dim FilNavn As String
Dim Linje As String
Dim X
Dim I As Integer
Dim R As Long
'Unikt filnummer findes
FilNummer = FreeFile
FilNavn = ThisWorkbook.Path & "\mvh.txt"
R = 1
Open FilNavn For Input As #FilNummer
  Do
    'Henter en linje ad gangen
  Line Input #FilNummer, Linje
  X = Split(Linje, " ")
  For I = 0 To UBound(Linje)
  Range("A" & R).Offset(0, I) = X(I)
  Next
  R = R + 1
Loop Until EOF(FilNummer)
Close #FilNummer

End Sub
Avatar billede kabbak Professor
02. marts 2006 - 22:58 #18
Public Sub Hent_proe_txt()
Dim FilNummer As Integer
Dim FilNavn As String
Dim Linje As String
Dim X
Dim I As Integer
Dim R As Long
'Unikt filnummer findes
FilNummer = FreeFile
FilNavn = ThisWorkbook.Path & "\mvh.txt"
R = 1' ret til det linie nummer, der skal startes på
Open FilNavn For Input As #FilNummer
  Do
    'Henter en linje ad gangen
  Line Input #FilNummer, Linje
  X = Split(Linje, " ")
  For I = 0 To UBound(Linje)
  Range("A" & R).Offset(0, I) = X(I)' ret A til den kolonne der skal startes i
  Next
  R = R + 1
Loop Until EOF(FilNummer)
Close #FilNummer

End Sub
Avatar billede mvhansen Nybegynder
02. marts 2006 - 23:05 #19
kabbak
Fejl compile error: expected array
Avatar billede mvhansen Nybegynder
02. marts 2006 - 23:06 #20
ved  UBound
Avatar billede kabbak Professor
02. marts 2006 - 23:06 #21
er du sikker på at der er mellemrum i alle linier, hvis ikke får du en fejl
Avatar billede kabbak Professor
02. marts 2006 - 23:09 #22
denne er forkert

For I = 0 To UBound(Linje)
skal være

For I = 0 To UBound(X)
Avatar billede kabbak Professor
02. marts 2006 - 23:13 #23
jeg har nu lavet så at den tjekker om der er mellemrum først

Public Sub Hent_proe_txt()
    Dim FilNummer As Integer
    Dim FilNavn As String
    Dim Linje As String
    Dim X As Variant
    Dim I As Integer
    Dim R As Long
    'Unikt filnummer findes
    FilNummer = FreeFile
    FilNavn = ThisWorkbook.Path & "\mvh.txt"
    R = 1    ' ret til det linie nummer, der skal startes på
    Open FilNavn For Input As #FilNummer
    Do
        'Henter en linje ad gangen
        Line Input #FilNummer, Linje
        If InStr(1, Trim(Linje), " ") > 0 Then
            X = Split(Trim(Linje), " ")
            For I = 0 To UBound(X)
                Range("A" & R).Offset(0, I) = X(I)    ' ret A til den kolonne der skal startes i
            Next
        Else
            Range("A" & R) = Linje
        End If
        R = R + 1
    Loop Until EOF(FilNummer)
    Close #FilNummer
End Sub
Avatar billede bak Forsker
02. marts 2006 - 23:19 #24
Kabbak->den laver vel ikke fejl, fordi der ikke er et mellemrum. Det vil bare sætte ubound(x) til 0.
Det må være fordi han rammer en tom linie at den fejler eller.....
Avatar billede bak Forsker
02. marts 2006 - 23:19 #25
tom linie giver ubound(x)=-1
Avatar billede kabbak Professor
02. marts 2006 - 23:21 #26
ok, men jeg havde fejl i denne linje

For I = 0 To UBound(Linje)

det skulle jo være

For I = 0 To UBound(X)
Avatar billede mvhansen Nybegynder
02. marts 2006 - 23:22 #27
Den sidste melder fejl
Ambiguous name detected:Hent_proe_txt

men den anden virker når der bliver rettet


For I = 0 To UBound(Linje)
skal være

For I = 0 To UBound(X)

i får mange tak for hjælpen
kabbak vil du ligge et svar

mvh

mvhansen
Avatar billede kabbak Professor
02. marts 2006 - 23:22 #28
Ambiguous name detected:Hent_proe_txt

betyder at du har 2 makroer med samme navn
Avatar billede mvhansen Nybegynder
02. marts 2006 - 23:24 #29
Hvad nu hvis jeg vil have et mellem rum for vær linje
i excel

mvh

mvhansen
Avatar billede kabbak Professor
02. marts 2006 - 23:26 #30
R = R + 2
skriver på hveranden linie
Avatar billede mvhansen Nybegynder
02. marts 2006 - 23:28 #31
Jeg hade to macro af samme navn
mange tak for hjælpen
kabbak og bak

mvh

mvhansen
Avatar billede kabbak Professor
02. marts 2006 - 23:28 #32
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