Forum: PC-Programmierung VBA: ausexcell Tabellenblätter eine Datei generieren


von Max (Gast)


Lesenswert?

Hallo Leute,
ich habe folgendes Problem:
Ich möchte aus mehreren excell Tabellen1..20 das in Prinzip das selbe 
tuhen, eine einzige txt Datei erzeugen. In dieser Datei sollen nun die 
Ergebnisse der Tabellen untereinander hinzugefügt werden. Ich habe es so 
gemacht was auch nicht klappt:

Public Sub CommandButton ()

Call Tabelle1.genFunk1
Call Tabelle1.genFunk2
...
-----------------------
Sub genFunc1...20()      'Für alle innerhalb gleiche Funktionalität
...
...
...
    Open "C:\temp\Generiere_Txt.txt" For Output As #1
        Print #1, Txt_data
    Close #1

End Sub

Das Problem liegt da dran, dass die Generiere_Txt.txt immer 
überschrieben wird.

Danke im Vorraus!

Gruß
Max

: Verschoben durch Admin
von Digi S. (digispark)


Lesenswert?

was auch logisch ist, da Open ... For Output immer eine neue Datei 
anlegt. Ein Blick in die Online-Hilfe zeigt, dass man als Mode auch 
Append verwenden kann ;-)

by the way: die Aufspaltung in 20 einzelne Prozeduren ist natürlich 
suboptiomal. Da solltest Du besser eine einzige Prozedur draus machen, 
an die Du dann den Namen des jeweiligen Sheets übergibst. In einem 
weiteren Parameter kannst Du dann mitgeben, ob eine neue Datei erstellt 
werden soll oder oben an die bestehende angehängt werden soll.

Dann würde ich das ganze auch nicht unbedingt in das VBA-Modul des 
ersten Sheets schreiben, sondern besser in ein eigenes Model ... sonst 
ist der ganze schöne Code weg, wenn aus versehen mal das Blatt gelöscht 
wird ;-)

von Max (Gast)


Lesenswert?

Hi Digi Spark,
danke für die Antworten und Ratschläge. Ich versuche mich in VBA 
reinzusteigern. Gibt es hierbei anstatt "open" befehl einen anderen 
befehl, der z.B. die daten untereinander anlegt?

von Digi S. (digispark)


Lesenswert?

Open ist schon richtig ... nur halt nicht For Output sondern dann halt 
For Append ... aber das steht wie gesagt auch in der Online-Hilfe zur 
Open-Anweisung ;-)

von Max (Gast)


Lesenswert?

Hi,
danke, soweit funktioniert es ganz gut.

Digi Spark schrieb:
> Da solltest Du besser eine einzige Prozedur draus machen,
> an die Du dann den Namen des jeweiligen Sheets übergibst.

Wie kann ich die Tabellennamen in der Prozedur ansprechen? Irgendwie 
bekomme ich immer eine Fehlermeldung.

von Digi S. (digispark)


Lesenswert?

Beispiel:

Option Explicit

Private Sub test()
    readValue ActiveWorkbook.Sheets("Sheet1")
    readValue ActiveWorkbook.Sheets("Sheet2")
End Sub

Private Sub readValue(ByRef pSheet As Worksheet)
    MsgBox pSheet.Cells(1, 1)
End Sub

Die Prozedur readValue gibt per Messagebox den Inhalt der Zelle A1 aus. 
Die Frage ist: von welchem Sheet? Antwort: von dem Sheet, das ihr als 
Parameter in pSheet übergeben wurde. Die Prozedur test zeigt, wie die 
readValue Prozedur aufgerufen wird um einmal den Wert aus Sheet1 und 
einmal aus dem Blatt Sheet2 auszulesen. Die Blattnamen musst Du 
natürlich an Deine Gegebenheiten anpassen.

Wenn Du Dich etwas in das Thema einarbeiten willst, versuch im Internet 
doch mal den Unterschied zwischen Sub und Function sowie zwischen ByRef 
und ByVal heraus zu finden. Das wird dir später beim Code-Verständnis / 
Programmieren sehr helfen.

von Max (Gast)


Lesenswert?

Vielen Dank Digi Spark!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.