VBA Excel: Codeproblem

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,

  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

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