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

Forumthread: VBA-Module von einer zur anderen Mappe kopieren

VBA-Module von einer zur anderen Mappe kopieren
10.09.2007 10:11:00
einer
Hallo alle zusammen, hab dieses kleine VBA gefunden, da ich noch nicht so fit in VBA bin, hab ich es nicht so ganz kapiert.
Ich will ein Modul von einer Arbeitsmappe in eine andere Automatisch kopieren.
Dabei ermittelt eine arbeitsmappe die aktuellste Version einer arbeitsmappe und soll in diese anschließend ein Modul kopieren, die es erlaubt ein Arbeitsblatt in eine weitere Arbeitsmappe zu kopieren.
Hoffe es kann mir jemand mit dem untenstehenden beispiel helfen. Da wo " \ " soll ja der dateipfad angegeben werden odeR?
Problem: Wie kann ich Modulblätter von der einen zur anderen Arbeitsmappe kopieren und das neue Blatt benennen?
StandardModule: basMain

Sub CopyModule()
Dim sPath As String
sPath = Application.Path & "\"
ThisWorkbook.VBProject _
.VBComponents("basMain").Export sPath & "basMain.bas"
Workbooks.Add 1
With ActiveWorkbook.VBProject
.VBComponents.Import sPath & "basMain.bas"
.VBComponents("basMain").Name = "MyModul"
End With
Kill sPath & "\basMain.bas"
MsgBox "Modul wurde kopiert!"
End Sub


Gruß Marcel

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Module von einer zur anderen Mappe kopieren
10.09.2007 11:57:25
einer
Hallo Marcel,
der Code, so wie du ihn hast macht folgendes.
1. Aus der Arbeitsmappe in der das Makro "CopyModule" angelegt ist ("ThisWorkbook") wird das Modul mit dem Namen "basMain" in die Datei "basMain.bas" exportiert und in dem Anwendungsverzeichnis von Excel (Application.Path) gespeichert.
2. Es wird eine neue Arbeitsmappe geöffnet.
3. In diese nun aktive Arbeitsmappe wird das zuvor exportierte Modul importiert.
4. Das Modul "basMain" in der neuen Datei wird umbenannt in "MyModul"
5. Die im Schritt 1 erstellte Export-Datei wird wieder gelöscht.
Um es auf deinen Fall anwendbar zu machen, muss der Code etwas modifiziert werden.
Die Namen der beiden Arbeitsmappen und den Namen der Module muss du dann noch festlegen.
Je nach eingestellten Sicherheitsfunktionen (z.B. auch Netzwerkssicherheit), kann es jedoch sein, dass der Code nicht ausgeführt wird, da VBA-Code-Manipulationen als sicherheitsbedenklich eingestuft werden
Gruß
Franz

Sub CopyModule()
Dim sPath As String, wbQuelle As Workbook, wbZiel As Workbook
sPath = Application.Path & "\"
Set wbQuelle = ThisWorkbook 'Arbeitsmappe in der das zu kopierende Modul ist
Set wbZiel = Workbooks("DateiXYZ.xls") 'Arbeitsmappe in die das Modul kopiert werden soll
wbQuelle.VBProject _
.VBComponents("basMain").Export sPath & "basMain.bas"
With wbZiel.VBProject
.VBComponents.Import sPath & "basMain.bas"
.VBComponents("basMain").Name = "MyModul"
End With
Kill sPath & "\basMain.bas"
MsgBox "Modul wurde kopiert!"
End Sub


Anzeige
AW: VBA-Module von einer zur anderen Mappe kopieren
10.09.2007 15:24:10
einer
noch ne kleine Frage. Kann ich viell die Zieldatei auch in eine Zelle in Arbeitsblatt schreiben und diesen Wert übernehmen in der Form :

Sub CopyModulic()
Dim sPath As String, wbQuelle As Workbook, wbZiel As Workbook
sPath = Application.Path & "\"
Set wbQuelle = ThisWorkbook
'Arbeitsmappe  _
in der das zu kopierende Modul ist
Set wbZiel =Worksheets("1ste tabelle").Range("H2").Value                                      _
'Arbeitsmappe in die das Modul kopiert werden soll
wbQuelle.VBProject _
.VBComponents("icmodul").Export sPath & "icmodul.bas"
With wbZiel.VBProject
.VBComponents.Import sPath & "icmodul.bas"
.VBComponents("icmodul").Name = "icmodul"
End With
Kill sPath & "\icmodul.bas"
MsgBox "Icmodul wurde kopiert!"
End Sub


Anzeige
AW: VBA-Module von einer zur anderen Mappe kopieren
10.09.2007 15:41:00
einer
Hallo marcel,
die Syntax ist dann:

Set wbZiel = Workbooks(Activeworkbook.Worksheets("1ste tabelle").Range("H2").Value) _
'Arbeitsmappe in die das Modul kopiert werden soll
oder
Set wbZiel = Workbooks(Workbooks("DieseDateiXYZ.xls").Worksheets("1ste tabelle").Range("H2"). _
Value) _
'Arbeitsmappe in die das Modul kopiert werden soll


Die Datei muss dann schon geöffnet sein, sonst gibt es eine Fehlermeldung
Gruß
Franz

Anzeige
AW: VBA-Module von einer zur anderen Mappe kopieren
10.09.2007 16:34:00
einer
Erstmal danke für die schnelle und super antwort.
Hab da noch etwas gefunden, wo ich denke das es noch besser zu meinem Problem paßen könnte.
->
Problem: Module und UserForms der in Zelle B1 genannten Arbeitsmappe sollen exportiert werden.
StandardModule: Modul1

Sub BasExtract()
Dim vbc As Object
Dim iCounter As Integer
Dim sFile As String, sTarget As String
sFile = Range("B1").Value
If Dir(sFile) = "" Then
Beep
MsgBox "Die Datei " & sFile & " wurde nicht gefunden!"
Exit Sub
End If
sTarget = WorksheetFunction.Substitute(sFile, "\" & Dir(sFile), "")
Application.EnableEvents = False
On Error GoTo ERRORHANDLER
Workbooks.Open sFile, False
For Each vbc In ActiveWorkbook.VBProject.VBComponents
iCounter = iCounter + 1
If vbc.Type = 1 Or vbc.Type = 100 Then
vbc.Export sTarget & "\backup" & iCounter & ".bas"
Else
vbc.Export sTarget & "\backup" & iCounter & ".frm"
End If
Next vbc
ActiveWorkbook.Close savechanges:=False
ERRORHANDLER:
Application.EnableEvents = True
End Sub


Ich verstehe aber nicht wo hin die sachen exportiert werden. Wahrscheinlich ne doffe frage aber jeder fängt ja mal klein an.
Danke schon mal führ deine Bemühungen.
Marcel

Anzeige
AW: VBA-Module von einer zur anderen Mappe kopiere
11.09.2007 02:18:00
einer
Hallo marcel,
wenn ich das richtig lese werden die Module und Userforms in das gleiche Verzeichnis exportiert, in dem die Datei abgelegt ist, die In Zelle B1 angegeben ist.
In B1 sollten Pfad und Name der Exceldateistehen, deren Module exprotiert werden sollen.
Die Funktion dieses Makros ist aber deutlich anders von dir in deiner ursprünglichen Frage beshcrieben.
Gruß
Franz
Anzeige
;

Forumthreads zu verwandten Themen

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

VBA-Module von einer zur anderen Mappe kopieren


Schritt-für-Schritt-Anleitung

Um ein Excel VBA Modul von einer Arbeitsmappe in eine andere zu kopieren, kannst Du den folgenden VBA-Code verwenden. Dieser Code exportiert ein Modul aus einer Arbeitsmappe und importiert es in eine andere.

Sub CopyModule()
    Dim sPath As String, wbQuelle As Workbook, wbZiel As Workbook
    sPath = Application.Path & "\"
    Set wbQuelle = ThisWorkbook ' Arbeitsmappe mit dem zu kopierenden Modul
    Set wbZiel = Workbooks("DateiXYZ.xls") ' Zieldatei, in die das Modul kopiert werden soll

    wbQuelle.VBProject.VBComponents("basMain").Export sPath & "basMain.bas"

    With wbZiel.VBProject
        .VBComponents.Import sPath & "basMain.bas"
        .VBComponents("basMain").Name = "MyModul"
    End With

    Kill sPath & "\basMain.bas"
    MsgBox "Modul wurde kopiert!"
End Sub

Stelle sicher, dass die Zieldatei ("DateiXYZ.xls") bereits geöffnet ist, bevor Du den Code ausführst.


Häufige Fehler und Lösungen

  1. Fehler: "Zieldatei nicht gefunden"

    • Lösung: Stelle sicher, dass die Zieldatei vorher geöffnet ist und der Name korrekt geschrieben ist.
  2. Fehler: Sicherheitswarnungen

    • Lösung: Überprüfe die Sicherheitseinstellungen für Makros in Excel. Du musst möglicherweise die Erlaubnis erteilen, damit VBA-Code ausgeführt werden kann.
  3. Fehler bei der Exportfunktion

    • Lösung: Vergewissere Dich, dass das Modul ("basMain") in der Quellarbeitsmappe vorhanden ist.

Alternative Methoden

Es gibt verschiedene Ansätze, ein Excel Arbeitsblatt in eine andere Mappe zu kopieren. Eine Möglichkeit besteht darin, den Zieldateinamen aus einer Zelle zu lesen und dann das Modul entsprechend zu exportieren.

Hier ein Beispiel:

Sub CopyModulic()
    Dim sPath As String, wbQuelle As Workbook, wbZiel As Workbook
    sPath = Application.Path & "\"
    Set wbQuelle = ThisWorkbook
    Set wbZiel = Workbooks(Worksheets("1ste tabelle").Range("H2").Value) ' Zieldatei aus Zelle H2

    wbQuelle.VBProject.VBComponents("icmodul").Export sPath & "icmodul.bas"

    With wbZiel.VBProject
        .VBComponents.Import sPath & "icmodul.bas"
        .VBComponents("icmodul").Name = "icmodul"
    End With

    Kill sPath & "\icmodul.bas"
    MsgBox "Icmodul wurde kopiert!"
End Sub

Praktische Beispiele

Ein weiteres Beispiel zeigt, wie Du alle Module und UserForms einer Arbeitsmappe exportieren kannst:

Sub BasExtract()
    Dim vbc As Object
    Dim iCounter As Integer
    Dim sFile As String, sTarget As String
    sFile = Range("B1").Value ' Dateipfad aus Zelle B1

    If Dir(sFile) = "" Then
        MsgBox "Die Datei " & sFile & " wurde nicht gefunden!"
        Exit Sub
    End If

    sTarget = WorksheetFunction.Substitute(sFile, "\" & Dir(sFile), "")
    Application.EnableEvents = False

    Workbooks.Open sFile, False
    For Each vbc In ActiveWorkbook.VBProject.VBComponents
        iCounter = iCounter + 1
        If vbc.Type = 1 Or vbc.Type = 100 Then
            vbc.Export sTarget & "\backup" & iCounter & ".bas"
        Else
            vbc.Export sTarget & "\backup" & iCounter & ".frm"
        End If
    Next vbc
    ActiveWorkbook.Close savechanges:=False
    Application.EnableEvents = True
End Sub

Tipps für Profis

  • Verwende Fehlerbehandlungsroutinen, um robuste VBA-Skripte zu erstellen.
  • Nutze kommentierte Codes, um den Überblick über deine VBA-Module zu behalten.
  • Integriere Modulnamen und Zieldateipfade in Variablen, um den Code flexibler zu gestalten.

FAQ: Häufige Fragen

1. Wie kann ich die Sicherheitswarnungen umgehen? Du kannst die Makrosicherheit in den Excel-Optionen anpassen, um VBA-Code auszuführen.

2. Was mache ich, wenn die Zieldatei nicht geöffnet ist? Die Zieldatei muss geöffnet sein, bevor Du versuchst, Module zu importieren oder zu exportieren. Andernfalls wird ein Fehler angezeigt.

3. Kann ich mehrere Module gleichzeitig kopieren? Ja, du kannst eine Schleife verwenden, um alle gewünschten Module in einem Durchgang zu kopieren.

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