ich möchte Daten von einer Datei in eine andere per Knopfdruck (siehe Button auf AC1 der Quelldatei) kopieren. Dabei ergeben sich für mich (absoluter Laie) zwei Probleme.
1. Die Anwahl des korrekten Tabellenblattes in der Zieldatei.
2. Das Format der Zellen in der Zieldatei.
Die Quelldatei (hier Test_Reisekosten_Abrechnung.xlsx) kann einen x-beliebigen Namen haben. Ich kann die Datei also nicht über den Namen ansprechen! Jeden Monat gibt es hunderte solcher Quelldateien mit den unterschiedlichsten Namen, deren Daten übertragen werden sollen.
Die Quelldatei hat im Original ca. 20 Arbeitsblätter. Eines davon heißt "Reisekosten". Die Bezeichnung des Quellarbeitsblattes ist immer gleich.
Die Zieldatei ist immer die gleiche. Hier im Beispiel heißt sie Test_Reisekosten.xlsx. Sie hat jedoch bis zu 100 Arbeitsblätter, pro Mitarbeiter ein separates Arbeitsblatt. Die Arbeitsblätter sind nach dem Nachnamen des Mitarbeiters benannt. Bei gleichen Nachnamen gibt es die Ausnahme, dass der Vorname als Abkürzung zugefügt wird (z.B. Meier, A und Meier, B). Das ist jedoch in meinem Programm vernachlässigt, da es selten vorkommt. Das könnte aus der Not heraus dann manuell abgearbeitet werden.
Um den Namen des korrekten Tabellenblattes in der Zieldatei zu finden, habe ich eine Behelfszelle angelegt (W1 der Quelldatei), welche den Nachnamen aus dem Gesamtnamen (G3) extrahiert. Der Gesamtname ist hier händisch eingetragen, in der Originaldatei ist die Zelle ein Verweis auf ein anderes Arbeitsblatt. Dort der Name entweder auch gezogen oder händisch eingegeben. Es ist ziemlich unstrukuriert. Der Gesamtname wird von vielen unterschiedlichen Leuten ausgefüllt. Es ist schwierig, die Mitarbeiter der Firma dazu zu bringen, eine gleiche Syntax einzuhalten. Nun wollte ich dieses Behelfsfeld als Variable nehmen (siehe Zeile 3 des Programms: Variable = ("W1")) und eine Verbindung zur Zieldatei herstellen. Das hat leider nicht funktioniert. Daher habe ich - um zu testen, ob der Rest meines Programmes funktioniert - die Variable durch "Meier" ersetzt. Also Frage 1.: Wie kann ich das korrekte Tabellenblatt in der Zieldatei ansprechen?
Dann werden einzelne Daten von der Quelldatei in die Zieldatei übertragen. In meinem jetzigen Programstadium nur Daten aus Zeile 8 und 9, ich würde den Part für Zeile 8 und 9 für Zeile 10 bis 12 wiederholen. Das funktioniert grundsätzlich auch. Jedoch nicht die Formatierung. Egal wie ich die Zellen in der Zieldatei formatiere, in Spalte B der Zieldatei steht ein falscher Wert und die Zellen der Spalten E, H und I verschlucken die zweite Null. Dazu muss ich sagen, dass in Zelle N8 und N9 der Quelldatei eigentlich eine Formel steht. Diese habe ich durch den Wert ersetzt. Das ändern am falschen Übertrag nichts. (Ich habe alle Formeln in der Quelldatei durch reine Daten ersetzt, da die Formeln durch die Benennung und Verweise sensible Daten enthalten. Ich gehe jedoch davon aus, dass dies für meine Probleme irrelevant ist.)
Zeile 7 und 8 der Zieldatei sind das Ergebnis des Übertrags per Button. Auch wenn ich die Zellen händisch im Nachhinein ändere, also das Format der Quelldatei übernehme, erscheinen die Nullen nicht?!?
Also Frage 2: Warum werden die Daten nicht korrekt übertragen, insbesonere auch Spalte B der Zieldatei?
Ich hoffe, ich habe mich einigermaßen verständlich ausgedrück. Falls noch Fragen sind, gerne melden. Und vorab schon mal vielen Dank für Eure Hilfe!!!
LG Gabi
Dies sind die beiden Dateien:
https://www.herber.de/bbs/user/167393.xlsx
https://www.herber.de/bbs/user/167394.xlsx
Sub TestUebertragGesamttabelle()
ActiveWorkbook.Worksheets("Reisekosten").Select
Dim Variable As String
Variable = ("W1")
Dim Datum8 As String, Abwesenheit8 As String, SpesenNeu8 As String, SpesenKU8 As String, Fruehstueck8 As String, MittagAbend8 As String, Datum9 As String, Abwesenheit9 As String, SpesenNeu9 As String, SpesenKU9 As String, Fruehstueck9 As String, MittagAbend9 As String
Datum8 = Range("A8")
Abwesenheit8 = Range("N8")
SpesenNeu8 = Range("O8")
SpesenKU8 = Range("P8")
Fruehstueck8 = Range("Q8")
MittagAbend8 = Range("R8")
Datum9 = Range("A9")
Abwesenheit9 = Range("N9")
SpesenNeu9 = Range("O9")
SpesenKU9 = Range("P9")
Fruehstueck9 = Range("Q9")
MittagAbend9 = Range("R9")
Workbooks("Test_Reisekosten.xlsx").Activate
Worksheets("Meier").Activate
Range("A5").Select
If Workbooks("Test_Reisekosten.xlsx").Worksheets("Meier").Range("A5").Offset(1, 0) > "" Then
Workbooks("Test_Reisekosten.xlsx").Worksheets("Meier").Range("A5").End(xlDown).Select
End If
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = Datum8
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Abwesenheit8
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = SpesenNeu8
ActiveCell.Offset(0, 2).Select
ActiveCell.Value = SpesenKU8
ActiveCell.Offset(0, 3).Select
ActiveCell.Value = Fruehstueck8
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = MittagAbend8
ActiveCell.Offset(1, -8).Select
ActiveCell.Value = Datum9
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Abwesenheit9
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = SpesenNeu9
ActiveCell.Offset(0, 2).Select
ActiveCell.Value = SpesenKU9
ActiveCell.Offset(0, 3).Select
ActiveCell.Value = Fruehstueck9
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = MittagAbend9
End Sub