Excelblatt kopieren mit VBA

Hallo liebe Excelfreunde,

meine VBA Kenntnisse sind bescheiden und zur Zeit nicht ausreichend. Deshalb bitte ich um Eure Mithilfe.

Ich habe viele identische XLS-Dateien an denen nun kleinen Änderungen und Zusätze über eine Makoroutine gemacht werden müssen. Ich rufe die Dateien nacheinander auf und Korrigiere mit dem Makro von einer Vorlage aus (nicht XLT) alles was nötig ist.
ABER nun möchte ich noch ein neues formatiertes Blatt mit Makro und Befehlsschaltfläche auf dem Blatt in alle Dateien mit hinein kopieren. Ich weis nicht wie ich das Makro und das Blatt mit VBA-Befehlen kopieren kann.

Dankende Grüße an freundliche Helfer
Fablonow a. D.

Hallo,

Wenn Du mal so gar nicht weißt, wie sich ein Problem in VBA lösen läßt, dann zeichne einfach ein Makro auf und schau dir den Code an.

Für dein spezielles Problem habe ich da gefunden:

 Sheets(1).Copy After:=Sheets(3) 

Wie allerdings ein Blatt in eine neue Arbeitsmappe Kopiert werden kann, habe ich auch nicht rausfinden können.

LG
Jochen

Nun trotzdem vielen Dank lieber Jochen, mit dem Makro-Recorder kann man aber leider nicht alles bewältigen.

Viele Grüße
Fablonow a. D.

Moin Fablonow,

ich weiss nicht so recht, warum Jo das nicht auch entdeckt hat mit dem Makro-Recorder, aber es fehlt nur eine Kleinigkeit:

Sheets(1).Copy After:=Sheets(3)

wird z.B. zu

Sheets(1).Copy After:=**Workbooks("Mappe2").**Sheets(3)

Ich bastel Dir mal schnell eine Routine, mit der Du beliebig viele Dateien automatisch auf einmal mit einem neuen Blatt versiehst (als Kopie von einem existierendem in der geöffneten Original-Datei).

Kristian

Beispieldatei mit Makro
So,

hier wie versprochen das Beispiel:

http://www.sabineschulz.de/kristian/WerWeissWas/WeWe…

Bei Fragen fragen.
Kristian

Hallo Krisitan
Ich habe dein schlaues Kopierprogramm ausprobiert und es klappt!
Aber: Ich kann das Makro nicht öffnen. Also kann ich nicht daraus lernen, leider. Ist es absichtlich gesperrt oder mache ich etwas falsch?
Für eine Antwort dankt dir
Erich

Code ist frei

Ich habe dein schlaues Kopierprogramm ausprobiert und es klappt!

Das freut mich.

Aber: Ich kann das Makro nicht öffnen.
Also kann ich nicht daraus lernen, leider.
Ist es absichtlich gesperrt oder mache ich etwas falsch?

Das ist allerdings sonderbar. Ich habe es ja nur deshalb so weit ausgeführt, damit man daraus lernen und es für andere Dinge wiederverwenden kann.

Also ich habe es nochmal probiert, und der Code ist normal frei verfügbar. Im VBA-Editor musst Du zum einen unter „Tabelle2“ gucken, dann aber auch im Modul „mod_TabelleKopieren“.

Am einfachsten solltest Du da hinkommen, indem Du im Excel-Menü „Extras/Makro/Makros…“ … ach nein, das funktioniert nicht, weil es private Prozeduren sind. Naja, guck nochmal im VBA-Editor, da solltest Du den Code finden.

Kristian

Nützliches Tool vergessen …
Ich hatte noch den Link zu einem ganz nützlichen kleinen Tool vergessen, das ich mal für genau solche Aufgaben geschrieben hatte:

http://www.sabineschulz.de/kristian/WerWeissWas/File…

Damit kann man z.B. Dateien, die im Windows-Explorer oder der Dateisuche markiert sind, in einer Text-Liste aufführen. Sprich: Ich markiere im Explorer alle relevanten Dateien, ziehe sie in das Toolfenster und erhalte dort eine Dateiliste (mit oder ohne Pfad). Die kann man sich dann einfach in die Zwischenablage kopieren von dort aus direkt in Excel einfügen.

Das Tool ist nur ein Prototy, bei dem nicht alles geht, was da zu sehen ist, aber das Beschriebene funktioniert sehr gut. Ich nutze es häufig.

Kristian

Lieber Kristian, ich hoffe Sie haben sich nicht die Nacht - wegen meiner Fragen zum Tag gemacht, und wenn doch, so hoffe ich, gehört VB-Programmieren zu Ihren Hobbys und Ihre Freundin hat nichts gegen Ihre nächtlichen Aktivitäten.
Sie ahnen noch gar nicht, wie sehr Sie mir damit geholfen haben, auch mit diesem schönen Kopiertool.
Wenn ich auch vieles Vergessen möchte in diesem Leben, so doch niemals helfende Hände. Wenn Sie auch mal Hilfe benötigen sollten, schreiben Sie einfach.
Kollegialer Einsatz wird mit Beförderung motiviert.
Freundschaftliche Grüße
Fablonow a.D.

Das geht schon in Ordnung :wink:

Ich bin jetzt seit knapp neun Jahren hier (also nahezu von Beginn an), und es hat sich für beide Seiten gelohnt :wink: Zumal man ja immer selbst auch dazu lernt.

Hallo Kristian
Der trübe Regensonntag brachte mich einen kleinen Schritt weiter.
Dein wirklich schönes Makro läuft auf meinem Laptop mit Excel 2002 bestens, hingegen nicht auf dem Desktop mit Excel97 (wo ich es auch nicht mit dem VBA-Editor ansehen kann).
Ich habe es dann von Excel2002 mit „speichern unter“ als alte Version „MS Excel 97-2002“ gespeichert. Dann kann ich es auch mit Excel97 laufen lassen und im VBA editieren, aber: Das Makro öffnet die Zieldatei NICHT und macht einen Fehler! Nur wenn ich die Zieldatei im Fenster offen habe, dann geht es. Aber schliessen tut es dann die Datei korrekt.
Fragen:

  • Mit welcher Excel-Version arbeitest du?
  • Gibt es Unterschiede zwischen den Excel-Versionen 97-2002? (nach MS eigentlich nicht!)
  • Die makro-Zeile
    Set Zielmappe = Workbooks.Open(Zelle.Value)
    scheint also in Excel97 nicht zu funktionieren. Kann man das Makro so „erweitern“, dass es auch in Excel97 läuft? (man = Kristian!).
    Ich habe auf jeden Fall anhand dieses Beispiels viel dazu gelernt und bedanke mich recht herzlich für die professionelle und uneigennützige Unterstützung.
    Beste Grüsse
    Erich

Moin Erich,

also das ist schon sehr sonderbar. Ich arbeite mit Excel 2000, was also genau zwischen Deinen beiden Versionen liegt. Und gleich vorneweg: Es gibt Unterschiede zwischen dem VBA von 97 und dem von 2000 (und vielleicht auch zwischen 2000 und 2002). Aus diesem Grunde läuft z.B. mein Urlaubsplaner nicht auf 97.

Ich gehe davon aus, dass sich zwischen beiden Versionen entweder

  • die Syntax,
  • die Objektbezeichnungen oder
  • die Objekt-Methoden/Eigenschaften
    geändert haben, so dass der Code solche Fehler verursacht. Leider habe ich hier kein 97, kann das also nicht testen. Vielleicht findest Du es ja selbst heraus, indem Du mal in der VBA-Hilfe guckst, ob sich irgendwo ein Hinweis auf einen der obigen drei Fälle findet. Dass es prinzipiell nicht geht, kann ich nicht glauben.

Achso, sonst mal mit Excel 97 ein Makro aufzeichnen, in dem ein (noch geschlossenes) Dokument geladen wird und das Ergebnis mit meinem Code vergleichen. Es sieht mit Sicherheit anders aus, weil ich kompakter geschrieben habe als es der Rekorder tut, aber eventuelle Unterschiede sollten sichtbar werden. Das Ergebnis würde mich interesieren.

Naja, und dass man den Code in Excel 2002 nicht sehen können soll … keine Ahnung, muss das morgen mal ausprobieren, aber meines Wissens sollte das kein Problem sein. Vielleicht sind da wieder irgendwelche besonderen Sicherheitseinstellungen aktiv.

Kristian

Hallo Kristian und Erich,
vielleicht habe ich die Ursache gefunden dafür, dass das Programm unter Excel '97 nicht läuft.

Beim Testen auf meinem alten Rechner mit Office97 fiel mir auf, dass zwar die Zieldatei richtig geöffnet wurde, danach aber nicht die Zieldatei, sondern die Quelldatei=Programmdatei aktiv war. Da ich früher öfter über derartige Phänomene gestolpert war, hat es bei mir „geklickt“:

Bei Buttons (und anderen Steuerelemente) auf Tabellenblättern muss die Eigenschaft „TakeFocusOnClick“ auf False stehen, sonst funktionieren etliche VBA-Befehle nicht. (Leider ist hier „True“ die Standardeinstellung, warum auch immer.)

Am Code ist also nichts zu ändern.

Beheben lässt sich das Problem hoffentlich so:

  • Blatt „Kopier-Button“ anzeigen
  • Symbolleiste „Steuerelement-Toolbox“ aktivieren (mit rechter Maustaste auf einen leeren Bereich oben bei den Funktionsleisten klicken)
  • „Entwurfsmodus“ aktivieren (erstes Symbol in der Funktionsleiste, mit blauem Dreieck)
  • „Eigenschaften“ aktivieren (zweites Symbol in der Funktionsleiste, Hand mit Blatt)
  • die Eigenschaft „TakeFocusOnClick“ auf False stellen
  • „Eigenschaften“ schließen
  • „Entwurfsmodus“ beenden (wieder Klick auf das erste Symbol)

Dann sollte das Programm laufen.

Grüße
von einem der anderen Erichs

1 „Gefällt mir“

Hallo Kristian und Namensvetter
Ich habe auch weiter experimentiert und dabei einiges gelernt.
Excel 97 ist version 8.0n und Excel 2002 ist version 10.0
Dann habe ich für Excel97 den Code mit einer IF-Abfrage ergänzt; das Oeffnen geht nun, nachdem ich es auf Anraten von Kristian durch Makro-Aufzeichnen angepasst hatte:

For Each Zelle In Selection
If Zelle.Value „“ Then
On Error Resume Next
If Left(Application.Version, InStr(Application.Version, „.“) - 1) = 8 Then
Workbooks.Open Zelle.Value
Set Zielmappe = ActiveWorkbook
'neuere Excels haben höhere Nummern, z.B. 2002 = 10.0,
Else
Set Zielmappe = Workbooks.Open(Zelle.Value)
End If


Die nächste Hürde kam dann aber beim „Copy“. Das habe ich noch nicht bewältigt (bin halt wirklich ein Amateur!)

vielleicht habe ich die Ursache gefunden dafür, dass das
Programm unter Excel '97 nicht läuft.

Ich werde aber in den nächsten Tagen die interessante Anregung meines Namensvetters ausprobieren; da wäre ja alles auf einen Streich gelöst.

Beheben lässt sich das Problem hoffentlich so:

Dann sollte das Programm laufen.

Ich werde mich wieder hier melden!
Bis dann
Erichsz (im Unterschied zu Eri474)

Heureka!!
Hallo Kristian und Erich Gier
Das war ja ganz einfach! Nur diesen Focus auf false und alles läuft!! Verstehe das überhaupt nicht, aber es funktioniert.
Das Original-VBA von Kristian geht nun auch auf Excel97, aber ein kleiner „Wermutstropfen“ bleibt:
Ich kann das VBA bekanntlich mit Excel97 nicht aufmachen. Deshalb habe ich es ja aus Excel2002 als Excel97 gespeichert. Dabei kam eine sehr merkwürdige Meldung, die ich einfach missachtet habe. (Wäre aber interessant zu hören, ob jemand eine Ahnung davon hat).

Excel can not sign VBA macros when saving to this file format. Do you want to remove the digital signature and continue saving this workbook?
Die Makros wurden jedoch richtig gespeichert und laufen also bei mir nun unter Excel97. Was ist wohl diese digitale Signatur?
Mit herzlichem Dank an die schlauen Kollegen!
Erich

Excel can not sign VBA macros when saving to this file format.
Do you want to remove the digital signature and continue
saving this workbook?

Ich habe die blöde Angewohnheit, alle meine Projekte zu signieren, auch wenn es nur mit dem selbstgemachten Zertifikat ist. Diese Signatur hat Excel 97 verworfen. Das ist schon das ganze Geheimnis.

Die Signatur geht aber auch bei Excel 200x verloren, sowie man den Code ändert und das Dokument abspeichert. Dazu ist sie ja auch da - geänderter Code ist nicht mehr der Original-Code, hat also das Recht auf die Signatur verloren.

Kristian

Hallo Kristian
Jetzt klare Sicht, Nebel hat sich gelichtet!
Danke
Erich