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.
Erstens, warum müssten Sie ein Modul _programmatisch_ kopieren? Zweitens, verwenden Sie den Debugger, um herauszufinden, bei welcher Zeile Sie den Fehler erhalten. – FDavidov
@FDavidov siehe aktualisierte Frage. –