VisualBasic Excel Entwicklertool File bereich Auslesen und Formatieren

kinimod2010

Cadet 4th Year
Registriert
Sep. 2014
Beiträge
68
Hall Leute ich bin grad dabei aus einer Textfile mit Excel über das entwicklertool dh. VB einen text einzulesen. Ich habe noch nie mit VB gearbeitet ich habe es geschafft das er ab dem Wort "Hallo" die nächsten 20 zeilen nimmt und den rest wegwirft. jetzt will ich nur noch die sachen in die Excel Zellen aufteilen und ich schaff das nicht. Bitte um eure hilfe die Txt ist mit angehängt.

Code:
Sub test()
    Dim fso, fsoFile, fsoText
    Dim x As Long
    Dim i As Long, j As Long, k As Long
    Const fsoForReading = 1
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fsoFile = fso.OpenTextFile("Bla_bla.txt", fsoForReading)
    fsoText = Split(fsoFile.readall, vbCrLf)
    fsoFile.Close

    For i = 0 To UBound(fsoText) - 1 ' ohne letzte Zeile
        If InStr(fsoText(i), "Hallo") Then x = i: Exit For
    Next i
    
   ' k = 1
   ' For j = x To x + 20
    '    Cells(k, 1).Value = fsoText(j)
     '   k = k + 1
    'Next j
    
     Cells.ClearContents

   For j = x To x + 20
        b = b + 1
        asd = Split(fsoText(j), vbTab)
        i = UBound(asd)
        If i = 0 Then GoTo start
        
            For a = 1 To i
            Set Cells(b, a) = Cells(b, a)
            Next a
start:
    Next j    
End Sub

Im endefekt brauche ich nur die Zahlen so wie im TXT file im Excel um weitere berechnungen zu machen :)
Vielen Danks schon mal

Lg kinimod2010
 

Anhänge

  • Bla_bla.txt
    4,8 KB · Aufrufe: 293
Dein Problem ist, dass du keine Ausgabe machst. In Zeile 31 setzt du nur die Zelle auf sich selbst, macht keinen Sinn. Außerdem scheinst du mit den Schleifen durcheinander gekommen zu sein. Die Prüfung, ob mehr als eine Spalte in der eingelesenen Zeile enthalten ist, brauchst du nur etwas anders schreiben, dann braucht man auch kein GoTo. Hier mal ein Vorschlag für die letzte große Schleife (Zeile 24-34):
Code:
zeile = 1
for j = x to x + 20
	helper = Split(fsoText(j), vbTab)
	if UBound(helper) > 0 then
		for k = 0 to UBound(helper)
			cells(zeile, k + 1).value = helper(k)
		next
		zeile = zeile + 1
	end if
next
 
Voll Cool Danke es Funktionier !!! Sehr gut :p

und wenn ich dem jetzt sagen will das der user sich nur die .txt Datein aussuchen will muss ich das verwenden?

Code:
  Dim fso, fsoFile, fsoText3.    Dim x As Long
  Dim i As Long, j As Long, k As Long
  Const fsoForReading = 1

   path = Application.GetOpenFilename("Textdateien (*.txt),*.txt,Alle Dateien,*.*")
   If path= False Then Exit Sub

  Set fso = CreateObject("Scripting.FileSystemObject")
  Set fsoFile = fso.OpenTextFile("path", fsoForReading)
  fsoText = Split(fsoFile.readall, vbCrLf)
  fsoFile.Close

oder nicht?

Lg kinimod2010
 
Ja genau, so öffnet sich der "Datei öffnen" Dialog. Die Prüfung auf false ist auch korrekt. Aber in Zeile 9, darf die Variable path nicht mit Anführungszeichen geschrieben werden, sonst sucht er nach einer Datei mit dem Namen path.
 
Hallo

Hab noch eine Frage was machst du genau in der Zeile?

Code:
cells(zeile, k + 1).value = helper(k)
--> ich hab das so gelesen du setzt die gewünschte zelle aber was macht dann das helper (k)?

ich hab mir das eingefügt jedoch aktualisiert der mir dann nicht mehr das excel gibt es da sowas wie ein drawnow?

Danke du hast mir viel weitergeholfen
 
Zuletzt bearbeitet:
In der Zeile sage ich "Gib den Wert an Stelle k aus dem Array helper in die Zelle mit den Koordinaten Zeile = zeile und Spalte = k+1 aus" (k+1 weil k bei 0 beginnt, der Spaltenindex bei Cells aber immer mit 1 beginnt).
helper wird ja zuvor durch den Aufruf von Split(...) gesetzt und Split gibt immer ein Array (in VBA auch Datenfeld) zurück. Mit helper(k) greife ich auf die k-te Stelle im Array zu, was in dem Fall die Spalten, also die Werte zwischen den Tabulatoren in der Textdatei, sind.

Was meinst du mit aktualisiert nicht mehr? Schaust du auch in dem richtigen Tabellenblatt ob was passiert ist? Ich weiß ja nicht an welcher Stelle das Makro liegt (ob als Modul, in einem Tabellenblatt oder in der Mappe selbst).
 
Gib den Wert an Stelle k aus dem Array helper in die Zelle mit den Koordinaten Zeile = zeile und Spalte = k+1 aus
das hat mir gefehlt :)

ich hatte auch nicht gewusst das split(...) ein array zurückgibt

Es funktioniert ich habe noch einen Fehler drinnen gehabt, habe mir die Path Variable nochmal überschrieben ;/. Beim erneuten durchlesen bin ich draufgekommen und hab den Fehler gefunden und behoben.

VIELEN DANK du hast mir sehr weitergeholfen.

lg kinimod2010
 
Zurück
Oben