Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro per Makro in neue Datei kopieren

Makro per Makro in neue Datei kopieren
miss18
Guten Morgen alle zusammen,
ich hoffe Ihr könnt mir noch einmal helfen.
Ich habe folgendens Makro (siehe SUB AbteilungX) für die Freigabe der Dokumentenübersicht für eine bestimmte Abteilung. Diese Freigabe-Makros sind in einer Exceldatei (.xls). Wenn ich die Datei sozusagen freigebe, wird aus der Original-Exceldatei (.xls) eine Kopie als XLT (damit mehrere MA gleichzeitig darauf arbeiten können) gespeichert und diese wird dann den MA zur Verfügung gestellt. Von da aus können sie die Dokumente herunterladen.
Da die Datei aber XLT zur Verfügung gestellt wird, ist das Problem wenn der MA diese schliessen _
will, kommt die Abfrage wegen dem speichern. Diese will ich nun deaktivieren. Dafür habe ich das passende Makro schon gefunden allerdings muss ich dieses Makro in das untere nun irgendwie einbauen, dass er automatisch wenn es als XLT gepseichert wird in "DieseArbeitsmappe" dieses kleine Makro (siehe Private Sub Workbokk ...) dort hinterlegt. Da bei jeder Freigabe das XLT überschrieben wird ( _
alle 2-3 Tage) kann ich es nicht immer per Hand integireren.
Könnt Ihr mir bitte helfen wie ich das kleine Makro in das große einbauen kann? Ich weiß es gä _
be andere möglichkeiten wie z.B.
- nicht als XLT abspeichern: muss da mehrere Mitarbeiter gleichzeitg darauf arbeiten müssen
- das kleine Makro in die Original-Datei einbauen: zu großes Risiko, da mehrere MA mit dieser _
Datei arbeiten und nicht jeder so gewissenhaft ist und regelmäßig abspeichert.
Das heißt dieses System ist laut meinem Vorgesetzten nicht stark veränderbar und somit ist der _
Einbau des kleinen Makro in das große Makro der einzige Weg, den wir haben.
Ich hoffe, Ihr könnt mir noch einmal Mal helfen, da ich endlich dieses Projekt abschliessen _
will und das hoffentlich das letzte Hindernis ist.
Vielen vielen Dank im Voraus.
GLG Denise

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
ThisWorkbook.Close False
Application.DisplayAlerts = True
End Sub



Sub AbteilungX()
'Speicher des Dokumentes als xlt
ActiveWorkbook.SaveAs Filename:= _
ActiveWorkbook.Path & "\AbteilungX.xlt", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=True
' Links oben in Tablellenblatt springen
Sheets("AbteilungX").Select
Range("B2:H2").Select
' Speichern im Ordner
ActiveWorkbook.SaveAs Filename:= _
ActiveWorkbook.Path & "\AbteilungX.xlt", _
FileFormat:=xlTemplate, ReadOnlyRecommended:=False, CreateBackup:=True
' Schliessen von Excel
Windows("AbteilungX.xlt").Activate
ActiveWindow.Close SaveChanges = True
End Sub


Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro per Makro in neue Datei kopieren
02.07.2009 10:42:12
Kawensmann
Hallo,
hier mal ein Ansatz:
Wichtig: Du musst im VBA-Editor über Extra|Verweise einen Verweis auf die
"Microsoft visual basic for applications extensibility 5.3" setzen!

Sub AbteilungX()
Dim cm As CodeModule
Dim i As Integer
Dim strCode As String
'Speicher des Dokumentes als xlt
ActiveWorkbook.SaveAs Filename:= _
ActiveWorkbook.Path & "\AbteilungX.xlt", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=True
strCode = "Private Sub Workbook_BeforeClose(Cancel As Boolean)" & Chr(13)
strCode = strCode & "Application.DisplayAlerts = False" & Chr(13)
strCode = strCode & "ThisWorkbook.Close False" & Chr(13)
strCode = strCode & "Application.DisplayAlerts = True" & Chr(13)
strCode = strCode & "End Sub"
Set cm = ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe").CodeModule
With cm
i = .CountOfLines + 1 ' Falls schon Code vorhanden ist, soll dieser nicht überschrieben  _
werden
.InsertLines i, strCode
End With
' Links oben in Tablellenblatt springen
Sheets("AbteilungX").Select
Range("B2:H2").Select
' Speichern im Ordner
ActiveWorkbook.SaveAs Filename:= _
ActiveWorkbook.Path & "\AbteilungX.xlt", _
FileFormat:=xlTemplate, ReadOnlyRecommended:=False, CreateBackup:=True
' Schliessen von Excel
Windows("AbteilungX.xlt").Activate
ActiveWindow.Close SaveChanges = True
End Sub


Dieser Code prüft aber nicht, ob schon eine Prozedur mit diesem Namen vorhanden ist!
Gruß
Kawensmann

Anzeige
AW: Makro per Makro in neue Datei kopieren
02.07.2009 11:22:33
miss18
Hallo Kawensmann, vielen Dank zunächst.
Habs gleich asuprobiert allerdings kommt mir die Fehlermeldung Laufzeitfehler 1004 und zwar hier:
Set cm = ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe").CodeModule
Das mit Extra/Verweise hatte ich davor gemacht.
AW: Makro per Makro in neue Datei kopieren
02.07.2009 11:32:35
Kawensmann
Heißt das Modul denn bei dir "DieseArbeitsmappe"? Dies ist bei einem deutschen Excel der Standard-Name.
Im englischen "ThisWorkbook".
Anzeige
AW: Makro per Makro in neue Datei kopieren
02.07.2009 12:45:28
miss18
Es heißt DieseArbeitsmappe, sicherheitshalber halbe ich es auch mit der Englischen probiert. Die gleiche Fehlermeldung:
"Der programmatische Zugriff auf das Visual Basis Projekt ist nicht sicher".
AW: Makro per Makro in neue Datei kopieren
02.07.2009 12:48:38
Rudi
Hallo,
Extras-Makro-Sicherheit-Vertrauenswürdige Quellen, Haken bei 'Zugriff auf ...' rein.
Gruß
Rudi
Anzeige
AW: Makro per Makro in neue Datei kopieren
02.07.2009 12:54:14
miss18
Hallo Rudi
danke genau das wars. Jetzt hat es super funktioniert.
Und ein herzliches Dankeschön natürlich auch an Kawensmann für das Makro selber. Wirklich super.
Genau das was ich wollte. Perfekt. Dankeschön.
LG Denise
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro in andere Datei kopieren und automatisieren


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Füge den Makro-Code ein:

    • Erstelle ein neues Modul, indem Du im VBA-Editor mit der rechten Maustaste auf "VBAProject (DeineDatei.xls)" klickst und "Einfügen" > "Modul" wählst.
    • Kopiere den folgenden Code und füge ihn in das Modul ein:
    Sub AbteilungX()
       Dim cm As CodeModule
       Dim i As Integer
       Dim strCode As String
    
       'Speicher des Dokumentes als xlt
       ActiveWorkbook.SaveAs Filename:= _
       ActiveWorkbook.Path & "\AbteilungX.xlt", _
       FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
       ReadOnlyRecommended:=False, CreateBackup:=True
    
       strCode = "Private Sub Workbook_BeforeClose(Cancel As Boolean)" & Chr(13)
       strCode = strCode & "Application.DisplayAlerts = False" & Chr(13)
       strCode = strCode & "ThisWorkbook.Close False" & Chr(13)
       strCode = strCode & "Application.DisplayAlerts = True" & Chr(13)
       strCode = strCode & "End Sub"
    
       Set cm = ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe").CodeModule
       With cm
           i = .CountOfLines + 1
           .InsertLines i, strCode
       End With
    
       ' Links oben in Tabellenblatt springen
       Sheets("AbteilungX").Select
       Range("B2:H2").Select
    
       ' Speichern im Ordner
       ActiveWorkbook.SaveAs Filename:= _
       ActiveWorkbook.Path & "\AbteilungX.xlt", _
       FileFormat:=xlTemplate, ReadOnlyRecommended:=False, CreateBackup:=True
    
       ' Schließen von Excel
       Windows("AbteilungX.xlt").Activate
       ActiveWindow.Close SaveChanges = True
    End Sub
  3. Verweise setzen: Gehe zu "Extras" > "Verweise" und aktiviere "Microsoft Visual Basic for Applications Extensibility 5.3".

  4. Makros aktivieren: Stelle sicher, dass Du in den Excel-Einstellungen unter "Makrosicherheit" die Option "Zugriff auf das VBA-Projektobjektmodell vertrauen" aktivierst.

  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.


Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Dieser Fehler kann auftreten, wenn der Programmcode versucht, auf das Modul "DieseArbeitsmappe" zuzugreifen. Stelle sicher, dass der Name korrekt ist und dass Du die richtigen Berechtigungen für den Zugriff auf das VBA-Projekt hast.

  • Fehlermeldung "programmatic access to the Visual Basic Project is not trusted": Gehe zu Datei > Optionen > Trust Center > Trust Center-Einstellungen > Makrosicherheit und aktiviere die entsprechende Option.


Alternative Methoden

Eine alternative Methode, um ein Excel-Makro in eine andere Datei zu kopieren, besteht darin, die Makros manuell zu kopieren und in das Modul der neuen Datei einzufügen. Dies kann insbesondere nützlich sein, wenn Du das Makro auf mehreren PCs verwenden möchtest:

  1. Öffne beide Excel-Dateien im VBA-Editor.
  2. Kopiere den Code aus dem Modul der Originaldatei.
  3. Füge den Code in das Modul der Ziel-Datei ein.

Praktische Beispiele

Ein Beispiel für ein praktisches Szenario: Du hast ein Makro, das Daten aus einer Datei in eine andere überträgt. Du kannst das folgende Beispiel verwenden:

Sub DatenÜbertragen()
    Workbooks("Quelle.xls").Sheets("Daten").Range("A1:B10").Copy _
    Destination:=Workbooks("Ziel.xls").Sheets("Daten").Range("A1")
End Sub

Mit diesem Excel-Makro kannst Du Daten effizient zwischen verschiedenen Dateien übertragen.


Tipps für Profis

  • Code modular halten: Verwende separate Module für unterschiedliche Funktionalitäten, um den Code übersichtlich zu halten.
  • Fehlerbehandlung einbauen: Implementiere Error-Handling in Deinem Makro, um unerwartete Fehler abzufangen.
  • Dokumentation: Kommentiere Deinen Code ausführlich, damit Du später leichter verstehen kannst, was jeder Teil macht.

FAQ: Häufige Fragen

1. Wie kann ich ein Excel-Makro auf einen anderen PC übertragen?
Du kannst das Makro einfach exportieren, indem Du im VBA-Editor das Modul mit dem Makro auswählst, mit der rechten Maustaste klickst und "Exportieren" wählst. Übertrage die .bas-Datei dann auf den anderen PC und importiere sie dort.

2. Ist es möglich, mehrere Makros gleichzeitig zu kopieren?
Ja, Du kannst mehrere Module im VBA-Editor auswählen und diese gleichzeitig exportieren. Achte darauf, dass Du alle benötigten Module in die Ziel-Datei importierst.

3. Was ist der Unterschied zwischen einem Makro und einem VBA-Skript?
Ein Makro ist ein aufgezeichnetes oder geschriebenes VBA-Skript, das eine bestimmte Aufgabe in Excel automatisiert. VBA (Visual Basic for Applications) ist die Programmiersprache selbst, die für die Erstellung von Makros verwendet wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige