Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1212to1216
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA - TextToColums

VBA - TextToColums
Adleano
Hallo zusammen,
ich will einen Text, den ich aus einer Texdatei einlese ein Problem diesen mit TextToColumns in einem Excel-Sheet einzufügen.
Der Text hat zwei Trennzeichen, nach denen ich trennen will:
1. Chr(1), also
2. Chr(10, also Zeilenschaltung um die einzelnen Datensätze zu trennen.
Das ganze sieht dann beispielsweise so aus:
Überschrift 1Überschrift2Überschrift3
wert1wert2wert3
wert5
Eine kleine Testroutine die ich gebastelt hat sieht so aus:
Sub ImportExcel()
Cells(1, 1) = GetText("C:\Import\text.txt")
Cells(1, 1).Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
End Sub
'Liest gesamten Inhalt einer Textdatei ein
Function GetText(strPfad As String) As String
Dim strFile As String
strFile = FreeFile()
Open strPfad For Binary As #strFile
GetText = Input(LOF(strFile), #strFile)
Close #strFile
End Function
Mein Problem ist, dass er nach der TextToColumns-Funktion nur noch die erste Zeile anzeigt. Alle Folgezeilen sind weg. Woran liegt das?
Optimal wäre wenn ich eine Funktion hätte, welche den Inhalt der Textdatei direkt auf dem Blatt in Spalten und Zeilen getrennt einfügt. Trennzeichen sind immer die selben.
Vielen Dank schon einmal und viele Grüße
Adleano

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Beispiel
03.05.2011 15:50:13
Tino
Hallo,
kannst Du uns eine Beispiel Text- File zum testen zur Verfügung stellen?
Gruß Tino
AW: Beispiel
04.05.2011 16:07:39
Adleano
Hallo zusammen,
vielen Dank für die schnelle und tolle Hilfe mit den beiden Scripten.
Ich habe heute die Info von der "anderen Seite" von denen ich den Text kriege erhalten. Ich krieg den Text jetzt direkt in eine Variable in mein Programm geliefert :-) Das passt soweit auch und ich habe Tinos Code entsprechend angepasst. In einem Fall erhalte ich allerdings an folgender Stelle einen Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler
Hier die Stelle an der das passiert (hab lediglich die Variablen-Namen angepasst. Logik ist unverändert):
Sub Ausgabe()
TextToColumn strInhalt, straAusgabe
With oTabellenblatt.wsBeaFinas
.Select
If IsArray(straAusgabe) Then
With Range("A1").Resize(UBound(straAusgabe), UBound(straAusgabe, 2))
.Value = straAusgabe               '

Sub TextToColumn(strText$, TxTArray)
Dim rArray, cArray, ArrayAusgabe()
Dim A&, B&, n&, nn&
rArray = Split(strText, Chr(10)) 'Zeilen
If UBound(rArray) = -1 Then Exit Sub
ReDim Preserve ArrayAusgabe(LBound(rArray) + 1 To UBound(rArray) + 1, 1 To 1)
nn& = UBound(ArrayAusgabe, 2)
For A = LBound(rArray) To UBound(rArray)
cArray = Split(rArray(A), Chr(1)) 'Spalten
n = UBound(cArray) + 1
If n > nn Then
ReDim Preserve ArrayAusgabe(LBound(ArrayAusgabe) To UBound(ArrayAusgabe), LBound( _
ArrayAusgabe, 2) To n)
nn = n
End If
For B = LBound(cArray) To UBound(cArray)
ArrayAusgabe(A + 1, B + 1) = cArray(B)
Next B
Next A
TxTArray = ArrayAusgabe
End Sub

Frage: Woran kann das liegen? Mit ist nicht ganz klar was diese Zeile hier macht?
"With Range("A1").Resize(UBound(straAusgabe), UBound(straAusgabe, 2))"
Vielen Dank schon einmal und viele Grüße
Adleano
Anzeige
AW: Beispiel
04.05.2011 17:08:18
Tino
Hallo,
mit
With Range("A1").Resize(UBound(straAusgabe), UBound(straAusgabe, 2))
wird die Größe des Zellbereiches bestimmt und festgelegt.
Zitat aus der Hilfe zur Resize-Eigenschaft
Ändert die Größe des angegebenen Bereichs. Gibt ein Range-Objekt zurück, das den geänderten Bereich darstellt.
In UBound() steckt die Anzahl Zeilen und in UBound(…,2) die Anzahl Spalten.
Warum jetzt bei Dir ein Fehler kommt kann ich so auch nicht sagen,
irgendetwas stimmt wahrscheinlich nicht mit der Bestimmung des Rangebereiches,
aber dann müsste der Fehler schon in der With Zeile kommen.
Hat sich was im Textinhalt geändert?
Prüfe mal wie groß Dein Array zurückgegeben wird.
If IsArray(straAusgabe) Then
MsgBox "Zeilen: " & UBound(straAusgabe) & vbCr & "Spalten: " & UBound(straAusgabe, 2)
'…
Sollte mindestens eine Zeile und eine Spalte habe und darf nicht größer als
die Anzahl zur Verfügung stehenden Zeilen und Spalten in der Excel- Tabelle sein,
wenn Du bei A1 beginnst (bei xl2003 max. 65536 Zeilen und 256 Spalten).
Gruß Tino
Anzeige
AW: Beispiel
03.05.2011 17:47:06
fcs
Hallo Adleano,
alternativ zu Tinos Vorschlag kann man das Textfile auch direkt temporär als Exceltabelle öffnen, die Daten ins aktive BLatt kopieren und die Textdatei wieder schliessen.
Gruß
Franz
Sub ImportExcel___1()
Dim Zelle As Range
Set Zelle = ActiveSheet.Cells(1, 1)
Application.ScreenUpdating = False
'Textfile temporär als Exceltabelle öffnen
Application.Workbooks.OpenText Filename:="C:\Users\Public\Test\74653.txt ", _
startrow:=1, Tab:=False, Semicolon:=False, Comma:=False, Space:=False, _
Other:=True, OtherChar:=Chr(1)
'Tabelleninhalt copieren und Textdatei schliessen
With ActiveWorkbook
.Sheets(1).UsedRange.Copy Destination:=Zelle
.Close savechanges:=False
End With
Application.ScreenUpdating = True: Set Zelle = Nothing
End Sub

Anzeige

55 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige