Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Fehler im Archivierungsmakro
#1
Hallo,

ich habe die spannende Aufgabe ein Makro zum Archivieren von Altdaten aus einer Exceldatei zu basteln.

Die Situation ist folgende. Es gibt heute schon eine Exceldatei (siehe "Mappe1") in der täglich ein neues Blatt mit dem aktuellen Datum angelegt wird (bescheuert, aber ich habe die Vorgabe an der Datei nichts zu ändern) um dort in Tabellen, Diagrammen etc. verschiedene Kennzahlen zu berechnen, darzustellen usw.
Wie man sich denken kann, wird diese Datei immer größer und schwerfälliger, weswegen nun zwecks Makro die ältesten Daten immer wieder in eine neue Datei archiviert werden sollen (manuell ausgelöst), so dass die eigentliche Datei "schlank" bleibt.

Ich habe hierfür eine Archivdatei (siehe "ZielArchiv") erstellt, in der die Daten in einem Blatt in verschiedene Tabellen aus der "Mappe1" eingefügt werden sollen. Jedes Tabellenblatt (angefangen mit dem ältesten, also ganz rechts stehend) wird also ausgewählt, die Daten kopiert und ins "ZielArchiv" auf einem Sheet in mehrere Tabellen eingefügt. Anschließend werden in "Mappe1" die entsprechenden Blätter gelöscht.
Bei wie vielen Blättern das pro Vorgang gemacht werden soll, trägt der User zuerst nach Makrostart in eine aufkommende Userform ein. trägt er bspw. eine Zwei ein, dann soll die Userform das Makro also zweimal starten.

Das Makro soll als erstes auf das letzte Sheet springen, von dort die Daten in das Archiv übertragen und schließlich das Sheet in "Mappe1" löschen . Nach Abschluss des Vorgangs soll das Archiv gespeichert und geschlossen werden, so dass der User möglichst wenig davon mitbekommt.

Eigentlich habe ich das alles auch soweit hinbekommen, allerdings startet das Makro immer als erstes mit dem beim Makrostart aktiviertem Tabellenblatt und eben nicht mit dem letzten Tabellenblatt in der Mappe Der Fall ist in den Beispieldateien zu sehen). Komischerweise läuft es aber ab dem zweiten Durchlauf korrekt durch. Die Schleife aktiviert ja eigentlich nur ein Makro was dann mehrmals ausgeführt wird. Ein Fehler müsste somit doch eigentlich immer auftreten und nicht nur beim ersten Durchgang.

Ich finde meinen Fehler im Code nicht.

Ich hoffe hier kann mir jemand weiterhelfen.

Danke und Gruß


Angehängte Dateien
.xlsm   Mappe1.xlsm (Größe: 29,42 KB / Downloads: 6)
.xlsm   ZielArchiv.xlsm (Größe: 8,76 KB / Downloads: 5)
Antworten Top
#2
Hallöchen,

ich habe mir Diene Dateien nicht angeschaut und versuche es mal so. Das letzte Blatt bekommst Du z.B. so:

Sub test()
MsgBox Sheets(Sheets.Count).Name
End Sub

Das bezieht sich allerdings auf das letzte Blatt in Reihenfolge der Reiter unten. Kannst Du schön testen, indem Du mal die Reihenfolge änderst.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Hi Blacko
probier mal in "Makro 1" folgende Änderung:
Code:
LetzteBlattnummer = ThisWorkbook.Sheets.Count

Du willst auf die Datei bezug nehmen, in der das Makro steht, und das ist ThisWorkbook.
ActiveWorkbook hingegen ist das gerade aktive, und das ist in diesem Fall das eben geöffnete Zielarchiv. Und davon willst Du sicher nicht die letzte Blattnummer wissen, oder?
Gruß, Raoul
Antworten Top
#4
Hallo

Danke schonmal für die beiden Lösungsansätze.

@Raoul21:  wenn ich ActiveWorkbook durch ThisWorkbook ersetze, dann erscheint der Debugger in der nächsten Zeile. Das Funktioniert also irgendwie nicht. Bisher hat er aber eigentlich auch immer das richtige Workbook ausgewählt. zumindest hatte der Code ja immer die richtige Anzahl an Sheets von Mappe1 in Zielarchiv kopiert, also sollte das kein Problem sein

@schauan: deine Variante habe ich in folgende zwei Zeilen umgebaut:

LetzteBlattnummer = Sheets.Count

Sheets(LetzteBlattnummer).Select

hier entsteht aber der selbe Fehler, also beim ersten Durchlauf wird das Sheet archiviert, welches beim starten des Makros aktiv war (und das ist meistens das "jüngste" welches eben nicht archiviert werden soll) und erst ab dem zweiten Durchlauf wird das letzte Sheet gesucht. Alle weiteren laufen dann ebenfalls perfekt ab.

Noch ne Idee woran es liegen könnte?

Gruß
Antworten Top
#5
Hallöchen,

wenn mit dem Vorschlag von Raoul in der nächsten Codezeile der Debugger erscheint, bist Du mit Deiner Blattnummer sicher auch in der falschen Mappe und dort gibt es nicht so viele. Wenn das so ist müsstest Du auch erst mal in die Quelle wechseln.

Wenn mit meinem Vorschlag das falsche Blatt kopiert wird, dann gehe Dein Kopiermakro mal bitte mit F8 schrittweise durch und schaue auf die Blätter, was passiert.

Du musst auch schauen, dass Du beim Start und Test der Varianten die gleichen Voraussetzungen hast, also z.B. die gleiche Mappe und das gleiche Blatt aktiv ist usw. Fehlermeldungen müssten dann wohl in beiden Varianten kommen oder nicht.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
Hallo schauan,

das hatte ich zwar alles schon mal gemacht, aber offensichtlich nicht aufmerksam genug.

Ich hab über die F8-Funktion alles nochmal durchgespielt und den Fehler gefunden.

Konnte es also beheben. Sorry, da hätte ich auch selber drauf kommen können.

Danke für den Support.

Gruß
Antworten Top
#7
Hallöchen,

kein Problem, gern gescheh'n. Manchmal sieht man den Wald vor lauter Bäumen nicht Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste