2016-12-03 5 views
0

Ich versuche, ein VBA-Modul von einer Arbeitsmappe zu einer anderen mit dem folgenden Code zu kopieren.VBA Modul von einer Arbeitsmappe in eine andere kopieren?

Dim comp As VBComponent 
Set comp = ThisWorkbook.VBProject.VBComponents("File") 
Workbooks("book2.xlsm").VBProject.VBComponents.Add comp 

Aus irgendeinem Grund das mir ein Fehler benutzerdefinierten Typ in der folgenden Zeile nicht definiert gibt: me

Dim comp As VBComponent 

Bitte kann mir jemand zeigen, wo ich falsch gehe?

Dank

+0

Erstens, warum müssten Sie ein Modul _programmatisch_ kopieren? Zweitens, verwenden Sie den Debugger, um herauszufinden, bei welcher Zeile Sie den Fehler erhalten. – FDavidov

+0

@FDavidov siehe aktualisierte Frage. –

Antwort

1

Sie müssen einen Verweis auf Microsoft Visual Basic for Applications Extensibility 5.3 über Extras/Verweise in der VBA-Editor hinzuzufügen.

Alternativ können Sie die späte Bindung verwenden. Ersetzen

Dim comp As VBComponent 

von

Dim comp As Object 

Und dann

Set comp = ThisWorkbook.VBProject.VBComponents("File") 

Wird wie erwartet. Etwas seltsamerweise müssen Sie den Verweis auf .VBProject nicht einfügen, da dies eine Standardeigenschaft eines Arbeitsmappenobjekts ist. Leider

,

Workbooks("book2.xlsm").VBProject.VBComponents.Add comp 

wird nicht funktionieren, wie Sie es erwarten. .Add erstellt eine leere Komponente. Das Argument muss eine Konstante sein, die den Komponententyp beschreibt, den Sie erstellen möchten, der 1 für ein Standardcodemodul sein sollte. (Es gibt benannte Konstanten, die Sie anstelle von 1 verwenden können, aber ich vermute, dass diese Konstanten nicht ohne die Referenz funktionieren).

können Sie, dass auch die Linie ohne den Verweis überprüfen:

Set target = Workbooks("book2.xlsm").VBProject.VBComponents.Add(1) 

(wo target als Object oder Variant erklärt wird) gelingen wird, ein neues Modul in book2 sowohl das Erstellen und einen Verweis darauf aufzubauen. Diese Referenz kann verwendet werden, um Code zu übertragen, aber nicht (AFAIK) alles auf einmal. Dazu müssen Sie möglicherweise programmgesteuert exportieren/importieren, wie in Chip Pearson article on scripting the VBE beschrieben. Sie könnten diesen Artikel durcharbeiten, indem Sie bei Bedarf eine späte Bindung verwenden.

+0

Ich kann dies nicht tun, da ich einen Arbeitscomputer verwende, der den Zugriff auf die Referenz sperrt. Gibt es einen alternativen Weg? –

+0

@ Bing.Wong Sehen Sie, ob die Änderung hilft. Es sollte dich wenigstens vom Boden heben. –

+0

danke für den Vorschlag, aber ich bekomme einen Fehler, programmatic Zugriff auf VBA-Projekt ist nicht vertrauenswürdig. –

Verwandte Themen