4.3k Aufrufe
Gefragt in Tabellenkalkulation von tsm1981 Einsteiger_in (25 Punkte)
Liebe VBA Experten und Mitglieder,

aus der Not geboren, hab ich kürzlich mit VBA angefangen und entdecke immer mehr die Welt der Möglichkeiten. Leider bin ich nicht versiert genug um folgendes Problem zu lösen um hoffe dringend auf Hilfe:

Es gibt eine Datenquelle (Tabelle1) und ein Template (Tabelle2). Bisher hat mein Makro bestimmte Werte aus einer Zeile in die dafür vorgesehenen Felder des XLS Templates eingefügt und als XLS Datei automatisch abgespeichert. Dann kam die nächste Zeile mit den entsprechenden Werten dran und die selbe Prozedur wurde durchlaufen bis zur ersten leeren Zeile in der Datenquelle. Hatte man also z.B. 15 Zeilen, so hatte man im Anschluss 15 XLS Dateien deren Inhalt ein mit Datenwerten ausgefülltes Template war.

Bleiben wir beim Beispiel von oben: Da diese Templates ausgedruckt werden sollen, ist es nicht sehr praktisch 15 Dateien zu öffnen. Deshalb sollen keine 15 XLS Dateien erscheinen, sondern eine neue Tabelle erstellt werden, wo jedes Template exakt unter dem anderen Template hinzugefügt wird. In dem Fall also 15 Templates mit den dazugehörigen Werten in einer Tabelle direkt untereinander.

Vllt. handelt es sich um eine einfach Angelegenheit oder es steckt doch mehr dahinter. Ich brauch auf jeden Fall Hilfe.

Vielen Dank, Tom

Hier der bisher genutzte Quellcode:

Public Sub Daten_Aufbereiten()

Dim i, STR, HNR

i = 1

Do

i = i + 1

'Werte aus Quelldatei...
STR = Sheets("Source").Cells(i, 3).Value
HNR = Sheets("Source").Cells(i, 4).Value


'...in die Zieldatei
Sheets("Template").Cells(2, 6).Value = STR
Sheets("Template").Cells(2, 10).Value = HNR

'Definierung von Speicherort
ActiveWorkbook.SaveAs Filename:="C:\Temp\" & STR & HNR & ".xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

Loop Until IsEmpty(Sheets("Source").Cells(i, 1)) = True

End Sub

4 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi tom ^^

vielleicht so ?

gruss nighty

noch als tip :-)
deine variablen sind nicht deklariert,sie gehen allesamt als variant durch

Option Explicit

Sub DateienLesen()
Call EventsOff
Dim DateiName As String
DateiName = Dir("C:\Temp\" & "*.xls")
Do While DateiName <> ""
If ThisWorkbook.Name <> DateiName Then
Workbooks.Open Filename:="C:\Temp\" & DateiName
Workbooks(DateiName).Worksheets(1).Rows("2:" & Workbooks(DateiName).Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row).Copy _
ThisWorkbook.Worksheets(1).Range("A" & ThisWorkbook.Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row + 1)
Workbooks(DateiName).Close SaveChanges:=False
End If
DateiName = Dir
Loop
Call EventsOn
End Sub

Public Sub EventsOff()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub

Public Sub EventsOn()
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
0 Punkte
Beantwortet von tsm1981 Einsteiger_in (25 Punkte)
Hi nighty, :)

also zunächst mal wow und danke für die schnelle Antwort. Du schüttelst wohl sowas aus dem Ärmel. ;)

Ich bin mir gerade nur nicht sicher, ob Dein Code meinen ersetzen oder ob ich ihn an meinen Code anhängen soll?!?
Zudem hab ich teilweise Probleme den Code zu interpretieren...ich VBA Noob. :s

Vllt hab ich mich auch falsch oder unklar ausgedrückt, aber ich habs mir so vorgestellt:
-> Ich wollt den Schritt mit der Erstellung der unzähligen XLS-Dateien mir sparen.
-> Stattdessen sollte das Template direkt in eine neue Tabelle "X" kopiert werden (in der gleichen Datei wo die Datenquelle und das Template sind) und dann die bestimmten Werte aus der Zeile der Datenquelle in bestimmte Zellen des Templates in die Tabelle"X" kopiert werden.
-> Dann sollte das Prozedere von vorne losgehen jedoch mit der nächsten Zeile und jenen Werten und dass das neue Template direkt unter das vorige mit Werten versehene Template im Tabellenreiter "X" kopiert werden sollte.

Ist das nachvollziehbar?

By the way, ein Template ist A1:AH34 groß.

Es kann sein, dass Du das so im Code geschrieben hast und ich nur nicht verstehe wie ich ihn einsetzen kann.

Ich bitte um Rücksicht meiner VBA Unkenntnis bzw. Jungfräulichkeit. ;)

Thx und Cheers, Tom
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi tom ^^

registrier dich bitte,dann koennten wie emailadressen tauschen(ueber den pager)

eine beispieldatei mit dummydaten waere von vorteil ^^

gruss nighty
...