Zum Inhalt springen

Reinladen einer Textdatei in Excel


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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!

Geschrieben

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...

Geschrieben

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... ;)

Geschrieben
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 ;-)))

Geschrieben
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 :)

Geschrieben

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 ****

Geschrieben

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...

  • 4 Jahre später...
Geschrieben

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 ?

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...