0xORChecker Geschrieben 17. März 2003 Geschrieben 17. März 2003 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 Zitieren
-roTekuGeL- Geschrieben 17. März 2003 Geschrieben 17. März 2003 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 Zitieren
0xORChecker Geschrieben 17. März 2003 Autor Geschrieben 17. März 2003 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 Zitieren
Peregrin Geschrieben 17. März 2003 Geschrieben 17. März 2003 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 Zitieren
0xORChecker Geschrieben 19. März 2003 Autor Geschrieben 19. März 2003 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! Zitieren
Peregrin Geschrieben 19. März 2003 Geschrieben 19. März 2003 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... Zitieren
-roTekuGeL- Geschrieben 19. März 2003 Geschrieben 19. März 2003 jaja die makroaufzeichner wieder... ... da hätte ich auch selber drauf kommen können Zitieren
Peregrin Geschrieben 19. März 2003 Geschrieben 19. März 2003 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. 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... Zitieren
0xORChecker Geschrieben 19. März 2003 Autor Geschrieben 19. März 2003 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 ;-))) Zitieren
-roTekuGeL- Geschrieben 19. März 2003 Geschrieben 19. März 2003 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. 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 Zitieren
0xORChecker Geschrieben 20. März 2003 Autor Geschrieben 20. März 2003 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 **** Zitieren
Peregrin Geschrieben 20. März 2003 Geschrieben 20. März 2003 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... Zitieren
0xORChecker Geschrieben 20. März 2003 Autor Geschrieben 20. März 2003 Der Wahnsinn es klappt! Bist ja ganz ein Schneller! Danke dir vielmals!!!! :marine Zitieren
Beatle Geschrieben 30. Juli 2007 Geschrieben 30. Juli 2007 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 ? Zitieren
xk4fu Geschrieben 31. Juli 2007 Geschrieben 31. Juli 2007 mit der funktion Instr kannst du nach strings suchen mit Mid kannst du diese ausschneiden Zitieren
Empfohlene Beiträge
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.