Hallo liebe Experten,
ich habe folgenden Code in meine Userform eingefügt.
Private Sub CommandButton1\_Click()
Set fs = CreateObject("Scripting.FileSystemObject")
For zeile = 2 To 20
If Cells(zeile, 2) = "" Then Exit For
Dateiname = "C:\Test\Quelle.txt"
Set a = fs.CreateTextFile(Dateiname, True)
Commandozeile = Chr(34) & Cells(zeile, 1) & Chr(34) & " " & Chr(34) & Cells(zeile, 2) & Chr(34)
a.writeline (Commandozeile)
a.Close
Next zeile
End Sub
Es funktioniert auch fast alles. Allerdings will ich jetzt dass beim Click auf den Button nicht nur die zuletzt beschriebene Zeile ins txtfile geschrieben wird sondern alle Zeilen die vorhanden sind außer der Ersten (Überschrift).
Ich hoffe ihr könnt mir helfen. Ich komm einfach nicht weiter.
Liebe Grüße
Spargel54321
Hallo Spargel,
du öffnest und schließt die Datei, in die du schreibst, in jedem Schleifendurchlauf neu. Das führt dazu, dass das Schreiben immer am Anfang der Datei beginnt und der bisherige Inhalt überschrieben wird.
Probier’s mal so (ungetestet):
Private Sub CommandButton1\_Click()
Set fs = CreateObject("Scripting.FileSystemObject")
Dateiname = "C:\Test\Quelle.txt"
Set a = fs.CreateTextFile(Dateiname, True)
For zeile = 2 To 20
If Cells(zeile, 2) = "" Then Exit For
Commandozeile = Chr(34) & Cells(zeile, 1) & Chr(34) & " " & \_
Chr(34) & Cells(zeile, 2) & Chr(34)
a.writeline (Commandozeile)
Next zeile
a.Close
End Sub
Dann wird die Datei vor der Schleife geöffnet. In der Schleife wird Zeile für Zeile geschrieben und hinter der Schleife wird die Datei zugemacht.
Wie gesagt, ungetestet.
Gruß, Andreas
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Andreas,
vielen Dank für die schnelle Antwort. Jetzt schreibt Excel zwar theoretisch beide Zeilen rein allerdings gibt er mir nur false aus.
Aber das dafür für beide gefüllten Zeilen *g*. Also irgendwo muss da noch ein Fehler sein. Vielleicht weist du ja was da falsch ist ?
Liebe Grüße
Spargel54321
Auf den ersten Blick seh ich den Fehler auch nicht.
Lass das ganze doch mal im Debuggermodus laufen (im VBA-Editor mit F8 Zeile für Zeile ausführen) und schau dir mal die Inhalte der Variablen an. Vielleicht hilft dir das weiter.
Gruß, Andreas
Hallo Andreas,
der Fehler war von mir selbst produziert. Ich hatte etwas falsch geschrieben. Der Code funktioniert einwandfrei. Jetzt klappts *juhu*.
Vielen Dank
Liebe Grüße
Spargel54321
Hi Spargel,
Prima!
Noch ein Tipp. Das Benutzen des ScriptHost (CreateObject, CreateTextFile usw.) in VBA ist nicht gerade der beste Stil. Versuch’s doch mal mit den VBA-Anweisungen Open, Write#, Close usw. Das ist der geradere Weg.
Gruß, Andreas
Hallo Andreas,
ja das werd ich mir das nächste mal anschauen.
Hier ist jetzt meine Beispieldatei:
http://rapidshare.com/files/237902531/Quellen1.xls.html
Aber jetzt hab ich noch eine letzte Frage:
Ist es möglich und wenn ja wie, dass falls eine der angesprochenen Zellen leer ist die Zeichen um diesen Zellenwert in der Textdatei nicht auftauchen?
Ich weiß ist kompliziert ausgedrückt aber ich weiß nicht wie ichs besser ausdrücken könnte.
Vielen Dank für die Hilfe.
Lieber Gruß
Spargel54321
Hallo Spargel,
nur so aus dem FF und als Denkanstoß. Das müsste gehen mit
If IsEmpty(Cells(…,…)) Then …
Gruß, Andreas
Hallo Andreas,
super Gedanke. Des könnte funktionieren. Ich weiß langsam fang ich an zu nerven mit meiner Unwissenheit aber warum kommt, wenn ich den Code so eingebe wie dus mir gezeigt, der Fehler: Ausdruck erwartet.
Soviel ich jetzt gelesen habe brauche ich nach dem If eine Bedingung die true oder false ist. Die Bedingung in dem Fall ist IsEmpty(cells(rowindex,columnindex)). Dann kommt Then, was sagt, was gemacht werden soll wenn die Bedingung True ist. Dann kommt die Anweisung in meinem Fall also dass nichts gemacht werden soll (nebenbei ich find keinen code dafür).
Dann kommt Else was sagt was gemacht werden soll, wenn die Bedingung false ist. Hier kommt dann die elseAnweisung was in meinem Fall
Cells(zeile, 1) & Chr(44) & Cells(zeile, 2) & Chr(59) & " "
wäre. Und am Ende dann End If. Aber was ist daran jetzt Falsch?
Vielen vielen Dank für die Super Hilfe.
Spargel54321
Hallo Spargel,
also, in deinem Fall musst du die Abfrage umdrehen. Du willst ja, dass etwas gemacht wird (Zeile in Datei schreiben) wenn die Zelle NICHT leer ist. Das geht dann so:
If Not IsEmpty(Cells(row, column)) Then
hier dann dein Code zum Zeile in Datei schreiben
End If
Den Else-Teil kannst du weglassen. Es soll ja, wenn die Zelle leer ist, nichts passieren.
Viel Erfolg!
Andreas
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Andreas,
vielen Dank aber irgendwas mach ich einfach falsch. Es kommt immernoch der gleiche Fehler. Hier mal der Code:
Private Sub CommandButton1\_Click()
Set fs = CreateObject("Scripting.FileSystemObject")
Dateiname = "C:\Test\Quelle.txt"
Set a = fs.CreateTextFile(Dateiname, True)
For zeile = 2 To 20
If Cells(zeile, 2) = "" Then Exit For
Commandozeile = \_
If Not IsEmpty (Cells(zeile,1)) then Cells(zeile, 1) & Chr(44) & Cells(zeile, 2) & Chr(59) & " " End If
a.writeline (Commandozeile)
Next zeile
a.Close
End Sub
Und dann kommt vom Kompiler nur zurück „Fehler: Ausdruck erwartet“ und des If am Anfang ist markiert. Was ist da falsch?
Lieber Gruß
Spargel54321
Hi Spargel,
nein, so geht das natürlich nicht. Du kannst nicht einer Variablen (Commandozeile) eine If-Then-Abfrage zuweisen. Also, noch mal gaaanz langsam:
Private Sub CommandButton1\_Click()
Set fs = CreateObject("Scripting.FileSystemObject")
Dateiname = "C:\Test\Quelle.txt"
Set a = fs.CreateTextFile(Dateiname, True)
For zeile = 2 To 20
If Cells(zeile, 2) = "" Then Exit For
So weit alles OK. Aber dann: Erst fragst du ab, ob die Zelle gefüllt ist:
If Not IsEmpty (Cells(zeile,1)) Then
jetzt kommt was passieren soll, wenn die Zelle gefüllt ist:
Erst wird die Variable „Commandozeile“ mit dem Text gefüllt, der in die Datei geschrieben werden soll:
Commandozeile = Chr(34) & Cells(zeile, 1) & Chr(34) & " " & \_
Chr(34) & Cells(zeile, 2) & Chr(34)
Dann wird der Text in die Datei geschrieben:
a.writeline (Commandozeile)
Dann wird die Schleife geschlossen und die Datei zu gemacht:
Next zeile
a.Close
Dann ist die Prozedur zu Ende:
End Sub
Alles Klar?
Gruß, Andreas
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Ich habe das End If vergessen. Hier noch mal der vollständige Code:
Private Sub CommandButton1\_Click()
Set fs = CreateObject("Scripting.FileSystemObject")
Dateiname = "C:\Test\Quelle.txt"
Set a = fs.CreateTextFile(Dateiname, True)
For zeile = 2 To 20
If Cells(zeile, 2) = "" Then Exit For
If Not IsEmpty (Cells(zeile,1)) Then
Commandozeile = Chr(34) & Cells(zeile, 1) & Chr(34) & \_
" " & Chr(34) & Cells(zeile, 2) & Chr(34)
a.writeline (Commandozeile)
End If
Next zeile
a.Close
End Sub
Gruß, Andreas
Hallo Andreas,
vielen Dank aber irgendwas mach ich einfach falsch. Es kommt
immernoch der gleiche Fehler. Hier mal der Code:
Private Sub CommandButton1_Click()
Set fs = CreateObject(„Scripting.FileSystemObject“)
Dateiname = „C:\Test\Quelle.txt“
Set a = fs.CreateTextFile(Dateiname, True)
For zeile = 2 To 20
If Cells(zeile, 2) = „“ Then Exit For
Commandozeile = _
If Not IsEmpty (Cells(zeile,1)) then Cells(zeile,
- & Chr(44) & Cells(zeile, 2) & Chr(59) & " " End If
a.writeline (Commandozeile)
Next zeile
a.Close
End Sub
Und dann kommt vom Kompiler nur zurück „Fehler: Ausdruck
erwartet“ und des If am Anfang ist markiert. Was ist da
falsch?
Lieber Gruß
Spargel54321
Hallo Andreas,
achso ok jetzt hab ichs verstanden ich werd jetzt mal schaun dass ich die userform in den nächsten Tagen fertig stell un dann mal hochstell.
Vielen vielen Dank für die super Hilfe.
Liebe Grüße
Spargel54321
Sternchen wäre nett. OwT
OwT