Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Reinladen einer Textdatei in Excel

Empfohlene Antworten

Hallo,

bin VBA Neuling und möchte eine Textdatei in Excel einlesen. Mit welchem Befehl mache ich das am Besten?

Bräuchte mal eine kleine Denkstütze

:P

Dim Ergebnis

Dim Dateinr As Integer

Dim Temp As String

On Error GoTo err_err

Dateinr = FreeFile

Open "DatePfad" For Input As Dateinr

Do While Not EOF(Dateinr)

Line Input #Dateinr, Temp

'an dieser stelle den wert der temp variable in eine zelle schreiben o.ä.

Loop

Close Dateinr

Exit Sub

'Fehlerbehandlung

err_err:

MsgBox Err.Description, vbCritical

hoffe das alles verständlich ist, wenn nicht schreib ruhig

Also mein Quelltext lautet nun so:

Sub test()

Dim Ergebnis

Dim Dateinr As Integer

Dim Temp As String

Dim i As Integer

On Error GoTo err_err

Dateinr = FreeFile

Open "F:\X\X\test2.txt" For Input As Dateinr

Do While Not EOF(Dateinr)

Line Input #Dateinr, Temp(1)

Worksheets("Tabelle1").Range("A1").Value = Temp

i = i + 1

Loop

Close Dateinr

Exit Sub

'Fehlerbehandlung

err_err:

MsgBox Err.Description, vbCritical

End Sub

Dieses Programm gibt mir immer nur die letzte Zeile der Datei aus, klar weil die Schleife durchlaufen wird und die Variable jedes mal überschrieben wird.

Ich will aber, dass alle Zeilen ausgegeben werden, um dies zu realisieren, wollte ich mit Inkrement in der Schleife arbeiten. So wie der Quelltext oben ist, bekomme ich bei der rot markierten Stelle eine Fehlermeldung, dass ein Datenfeld erwartet wird. Nun meine Frage: wie kann ich die Beziehung zwischen i und temp herstellen?

Merci

hi,

Temp als array deklarieren und dimensionieren:

Dim Temp(5) As String
damit deklarierst du ein array mit der moeglichkeit, 5 werte zu speichern. mit
Redim Preserve Temp(anzahl)

dimensioniert du das array neu.

dann kannst du mit dem schleifenzaehler das i-te element im array ansprechen...

hoffe, es hilft

Soweit so gut :-)))

Habe zwar ein Array erstellt, jedoch bekomme ich die for - Schleife nicht ganz hin.

Ich versuche, dass er mir Temp(0) in A1 ausgibt, Temp(1) in A2 usw...

Mein Quelltext sieht folgendermassen aus: Funzt aber net:

Sub test()

Dim Dateinr As Integer

Dim Temp(9) As String

Dim i As Integer

On Error GoTo err_err

Dateinr = FreeFile

Open "F:\X\X\test.txt" For Input As Dateinr

Do While Not EOF(Dateinr)

Line Input #Dateinr, Temp(i)

i = i + 1

Loop

For i = 0 To 9

Worksheets("Tabelle1").Range("A(i)").Value = Temp(i)

Next i

Close Dateinr

Exit Sub

'Fehlerbehandlung

err_err:

MsgBox Err.Description, vbCritical

End Sub

wäre dankbar um jede Hilfe!

Nun noch eine Frage. Die Textsequenzen sind in der Textdatei getrennt durch Tabs. Kann man in VBA sagen, dass er die Strings nach jedem Tab(mal einer, mal drei)in die nächste Spalte trägt, dass ich am Schluss eine Tabelle bekomme???

Danke!

hi,

dafuer wuerde ich anders vorgehen:

    Workbooks.OpenText Filename:="F:\X\X\input.txt", Origin:=xlWindows, _

        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _

        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _

        , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _

        Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1))

damit oeffnest du eine textdatei, deren werte durch tabulatoren in spalten unterteilt sind(parameter tab:=true). in diesem fall werden 6 spalten erwartet (parameter fieldinfo:=array(...))

diese funktion ist in der hilfe recht gut beschrieben.

ansonsten mal den makro-rekorder starten und eine solche datei oeffnen...

weiter mit der bisherigen loesung:

Worksheets("Tabelle1").Range( "A" & CStr(i) ).Value = Temp(i)

mit dem blau gefaerbten text wird in der ersten zeile immer eine spalte 'draufaddiert', also A1 -> A2 -> A3 -> ...

fuer das problem solltest du dir mal die funktionen 'offset' fuer das range-objekt ansehen. damit kannst du relativ zur aktuellen zelle andere zellen ansprechen. ich weiss da allerdings die syntax nicht mehr so genau...

hoffe, es hilft...

jaja die makroaufzeichner wieder... :)

... da hätte ich auch selber drauf kommen können

hi,

sorry, falls der vorschlag nicht dem niveau entspricht ;) (ich mag das aufzeichnen von makros eigentlich auch nicht) aber wenn ich mich schon mit vba herumschlage, dann benutze ich auch die mir angebotenen hilfsmittel. :D

alternativ:

zwei geschachtelte schleifen

1) while (not file.eof)) (schleife ueber zeilen)

2) zeile++

3) ausgelesene zeile an den tabs trennen (array = split(zeile, vbtab))

3) for i = lbound(array) to ubound(array) (schleife ueber spalten)

4) spalte++

5) array(spalte) in zelle schreiben

nur: da sollte ein newbie hingefuehrt werden...

ok, zugegeben, der makrorekorder ist nicht wirklich die loesung... ;)

Originally posted by Peregrin

hi,

dafuer wuerde ich anders vorgehen:

    Workbooks.OpenText Filename:="F:\X\X\input.txt", Origin:=xlWindows, _

        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _

        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _

        , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _

        Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1))

Das Problem ist, dass das ein Teil meines Abschlussprojektes ist und ich nicht den Quellcode des Makro-Recorders übernehmen will. Kann damit auch nicht gross was anfangen!

Würde die Datei lieber selbst formatieren mit den Tabs.

Danke für den tip mit der CStr Funktion. Hat endlich funktioniert. VBA ist nun garnicht meine stärke ;-)))

Originally posted by Peregrin

hi,

sorry, falls der vorschlag nicht dem niveau entspricht ;) (ich mag das aufzeichnen von makros eigentlich auch nicht) aber wenn ich mich schon mit vba herumschlage, dann benutze ich auch die mir angebotenen hilfsmittel. :D

nur: da sollte ein newbie hingefuehrt werden...

ok, zugegeben, der makrorekorder ist nicht wirklich die loesung... ;)

war keine anschuldigung, sondern nur ne feststellung...

außerdem hat mir dieser makrorecorder auch schon gute dienste geleistet :)

alternativ:

zwei geschachtelte schleifen

1) while (not file.eof)) (schleife ueber zeilen)

2) zeile++

3) ausgelesene zeile an den tabs trennen (array = split(zeile, vbtab))

3) for i = lbound(array) to ubound(array) (schleife ueber spalten)

4) spalte++

5) array(spalte) in zelle schreiben

@Peregrin

Also ich weiss ganz genau was du meinst, kriege es jedoch in VB einfach net hin!

So ein ****

hi,

so sollte es gehen:

Public Sub readInputFile()

    Dim ff As Long

    Dim sFile As String

    Dim sLine As String

    Dim arr() As String

    Dim row As Long

    Dim col As Long


    Dim activCell As Range


    ff = FreeFile

    sFile = "C:\test\input.txt"

    'datei oeffnen

    Open sFile For Input As #ff

    'erste zelle markieren

    Set activCell = Worksheets("Tabelle1").Range("A1")

    Call activCell.Activate


    While (Not EOF(ff))

        Line Input #ff, sLine       'zeile einlesen

        arr = Split(sLine, vbTab)   'an tabs aufspalten

        For col = LBound(arr) To UBound(arr)

            'relativ zur aktiven zelle den wert setzen

            activCell.Offset(row, col).Value = arr(col)

        Next    'i

        row = row + 1

    Wend

    'schliessen

    Close ff

End Sub

hoffe, es hilft...

Der Wahnsinn es klappt! Bist ja ganz ein Schneller!

Danke dir vielmals!!!!

:marine

war mir ein fest :)

  • 4 Jahre später...

hallo zusammen,

durch das VB-Script habe ich es hinbekommen die datei in excel einzulesen

nur steh ich jetzt vor dem problem ein bestimmten string zu suchen und in eine andere mappe zu kopieren, die txt datei enthält z.b. email adressen die ich dann aus dem ganzen wirrwarr kopiert haben möchte und in eine andere mappe stehen haben will.

könnte mir da jemand zu helfen ?

mit der funktion Instr kannst du nach strings suchen

mit Mid kannst du diese ausschneiden

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.