easy4breezy
Goto Top

FSO Excel VBA

Hi Leute face-smile

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 face-smile


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

Content-ID: 296364

Url: https://administrator.de/contentid/296364

Ausgedruckt am: 26.11.2024 um 09:11 Uhr

emeriks
emeriks 16.02.2016 um 13:37:10 Uhr
Goto Top
Hi,
Ich gehe davon aus, das in Value nach dem Komma ein Leerzeichen ist.
    Value = Cells(Zeile, Spalte).Value
    fso.CreateTextFile(Ziel & Value & Typ, True).Write Replace(Value, ", ", ", " & vbnewline)  


E.
easy4breezy
easy4breezy 16.02.2016 um 13:52:38 Uhr
Goto Top
Hi emeriks,

die zwei Zeilen sorgen schon mal dafür, dass das Ganze richtig in der txt gespeichert wird, vielen Dank dafür!
Und ja, nach dem Koma ist ein Leerzeichen face-smile

Weißt du auch wie ich es schaffe, dass die Werte von mehreren Zellen in einer Zeile nacheinander ausgelesen werden?
Denn bisher habe ich eine neue Spalte eingefügt und alle Werte aus jeder Reihe in der benachbarten Zelle zusammengefügt mit dem verbinden-Befehl.
Also dass es am Ende so ist:
WertA2,
WertB2,
WertC2,
...

Und die Datei soll am Ende z.B. WertA2.txt heißen.

Dankeschön!
emeriks
emeriks 16.02.2016 um 14:18:02 Uhr
Goto Top
Ich kann Dir nur sehr schwer folgen. WAS willst Du erreichen?
Du willst Dir die Spalte mit dem "CONCATENATE" ersparen, oder was?
easy4breezy
easy4breezy 16.02.2016 aktualisiert um 15:09:27 Uhr
Goto Top
Ja genau, das wäre cool, ich habe das ganze auch mit Erfolg getestet und habe diesen Schnipsel einfach eingefügt am Anfang.

Columns("O:O").Select  
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("O1").Select  
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-5],"", "",RC[-1],"", "",RC[-7],"", "",RC[-2],"", "",RC[-6])"  

Selection.AutoFill Destination:=Range("O1:O999")  

Problem ist dann aber, dass ich im Code eine Zelle auswähle und man nicht mehr manuell eine Zelle wählen kann.
Von daher mache ich das einfach manuell, dauert ja keine Minute, aber die Faulheit eines Informatikers ist unglaublich groß manchmal ^^

Vielen Dank auf jeden Fall!
emeriks
emeriks 16.02.2016 um 15:18:06 Uhr
Goto Top
Wenn ich wüsste, was Du eigentlich erreichen willst, hätte ich auch anders helfen können. Aber so ist auch gut ...
easy4breezy
easy4breezy 16.02.2016 um 15:24:14 Uhr
Goto Top
Ich wollte eigentlich erreichen mir das CONCATENATE zu ersparen face-smile

Oder dass der Dateiname nicht aus dem ganzen CONCATENATE-Schnipsel besteht, sondern nur aus einer Zelle.
emeriks
emeriks 16.02.2016 aktualisiert um 15:37:47 Uhr
Goto Top
Ich raffe es immer noch nicht.

Ich wollte eigentlich erreichen mir das CONCATENATE zu ersparen face-smile
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  
Oder nicht?
Das geht sicher noch intelligenter.
easy4breezy
easy4breezy 16.02.2016 um 15:45:24 Uhr
Goto Top
Es sind in Spalte A Werte, in Spalte B, usw.
Diese möchte ich eben alle in meiner txt haben, daher vorher das CONCATENATE .

Aber ich mache es einfach manuell, danke trotzdem face-smile
easy4breezy
easy4breezy 16.02.2016 um 15:56:01 Uhr
Goto Top
Mit deinem Code klappt es auch ohne das CONCATENATE , danke face-smile