FSO Excel VBA
Hi Leute
ich hätte eine kleine Frage zu FSO und Excel.
Bis jetzt klappt mein VBA-Skript so wie es soll.
Nun würde ich das ganze aber gerne noch vereinfachen.
Bis jetzt habe ich verschiedene Reihen in einer Zelle zusammengefasst mit einem "," als Trennzeichen mit diesem Befehl: =CONCATENATE(J2;", ";N2;", ";H2;", ";M2;", ";I2)
Diese Zelle wird dann in eine Datei geschrieben mit dem Inhalt und der Dateiname ist gleichzeitig auch der Inhalt, z.B.: WertJ2, WertN2,...,WertI2.txt.
Das ist noch ein bisschen unschön und ich würde es gerne so haben, dass in der txt-Datei die Werte untereinander in diesem Schema stehen:
WertO2,
WertO3,
Also nach jedem Wert ein "," gefolgt von einem Leerzeichen und dann einem Umbruch.
Die Datei selbst soll am besten nur den Namen aus einer bestimmten Reihe annehmen und nicht den ganzen Inhalt aller Zellen.
Ich hoffe ich versteht was ich meine, ansonsten fragt einfach nach
ich hätte eine kleine Frage zu FSO und Excel.
Bis jetzt klappt mein VBA-Skript so wie es soll.
Nun würde ich das ganze aber gerne noch vereinfachen.
Bis jetzt habe ich verschiedene Reihen in einer Zelle zusammengefasst mit einem "," als Trennzeichen mit diesem Befehl: =CONCATENATE(J2;", ";N2;", ";H2;", ";M2;", ";I2)
Diese Zelle wird dann in eine Datei geschrieben mit dem Inhalt und der Dateiname ist gleichzeitig auch der Inhalt, z.B.: WertJ2, WertN2,...,WertI2.txt.
Das ist noch ein bisschen unschön und ich würde es gerne so haben, dass in der txt-Datei die Werte untereinander in diesem Schema stehen:
WertO2,
WertO3,
Also nach jedem Wert ein "," gefolgt von einem Leerzeichen und dann einem Umbruch.
Die Datei selbst soll am besten nur den Namen aus einer bestimmten Reihe annehmen und nicht den ganzen Inhalt aller Zellen.
Ich hoffe ich versteht was ich meine, ansonsten fragt einfach nach
Sub ErstelleDateien()
Set fso = CreateObject("Scripting.FileSystemObject")
' Hier wird ein neuer Ordner mit dem aktuellen Datum erstellt
fso.CreateFolder ("H:\Documents\ExcelTest\" & Date)
' Hier wird der zuvor erstellte Ordner als Zielordner gesetzt
Ziel = "H:\Documents\ExcelTest\" & Date
' Hier wird der Dateityp gesetzt
Typ = ".txt"
' Hier wird die Zeile anhand der markierten Zelle übernommen
AbZeile = ActiveCell.Row
' Hier wird die Spalte anhand der markierten Zelle übernommen
Spalte = ActiveCell.Column
Zeile = AbZeile
If Right(Ziel, 1) <> "\" Then Ziel = Ziel & "\"
' Schreibt den Wert jeder Zelle in eine Datei und benennt diese danach
Do While Cells(Zeile, Spalte).Value <> ""
fso.CreateTextFile(Ziel & Cells(Zeile, Spalte).Value & Typ, True).Write Cells(Zeile, Spalte).Value
Zeile = Zeile + 1
Nr = Nr + 1
Loop
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 296364
Url: https://administrator.de/contentid/296364
Ausgedruckt am: 26.11.2024 um 09:11 Uhr
9 Kommentare
Neuester Kommentar
Ich raffe es immer noch nicht.
Oder nicht?
Das geht sicher noch intelligenter.
Ich wollte eigentlich erreichen mir das CONCATENATE zu ersparen
Warum lässt Du es dann nicht weg? In Deinem zweiten Schnipsel fügst Du es bloß programmatisch ein, statt manuell. Wozu brauchst Du das überhaupt?Oder dass der Dateiname nicht aus dem ganzen CONCATENATE-Schnipsel besteht, sondern nur aus einer Zelle.
Ja, und warum machst Du das nicht so?Weißt du auch wie ich es schaffe, dass die Werte von mehreren Zellen in einer Zeile nacheinander ausgelesen werden?
Wie ich das sehe, sind die Spalten ja nicht nach einander.CONCATENATE(J2;", ";N2;", ";H2;",";M2;", ";I2)
In VBA wäre das doch einfach:Zeile = 2
Wert = Cells(Zeile, 10).Value & ", " & Cells(Zeile, 14).Value & ", " & Cells(Zeile, 8).Value & ", " & Cells(Zeile, 13).Value & ", " & Cells(Zeile, 9).Value
Das geht sicher noch intelligenter.