2016-12-03 6 views
0

Я пытаюсь скопировать модуль vba из одной книги в другую, используя приведенный ниже код.VBA Копировать модуль из одной книги в другую?

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

По какой-то причине это дает мне определенный тип пользователя ошибка не определена на следующей строке:

Dim comp As VBComponent 

Пожалуйста, может кто-то показать мне, где я буду неправильно?

Благодаря

+0

Во-первых, зачем вам нужно _programmatically_ копировать модуль? Во-вторых, используйте отладчик, чтобы найти, на какой строке вы получаете сообщение об ошибке. – FDavidov

+0

@FDavidov посмотрите пожалуйста обновленный вопрос. –

ответ

1

Вы должны добавить ссылку на Microsoft Visual Basic for Applications Extensibility 5.3 через Tools/Reference в редакторе VBA.

В качестве альтернативы вы можете использовать последнее связывание.

Заменить

Dim comp As VBComponent 

по

Dim comp As Object 

А потом

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

будет работать, как ожидалось. Как ни странно, вам не нужно включать ссылку для вызова .VBProject, поскольку это стандартное свойство объекта рабочей книги.

К сожалению,

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

не будет работать, как вы ожидаете. .Add создает пустой компонент. Аргумент должен быть константой, которая описывает тип компонента, который вы хотите создать, который должен быть 1 для стандартного модуля кода. (Есть константы, которые вы можете использовать вместо 1, но я подозреваю, что эти константы не будут работать без ссылки).

Вы можете проверить, что даже без ссылки на строку:

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

(где target объявлен как Object или Variant) преуспеет в обеих создании нового модуля в book2 и создании ссылки на него. Эта ссылка может использоваться для передачи кода, но не (AFAIK) все сразу. Для этого вам может потребоваться программный экспорт/импорт, как описано в Chip Pearson's article on scripting the VBE. Вы можете проработать эту статью, используя при необходимости позднюю привязку.

+0

Я не могу сделать это, так как я использую рабочий компьютер, который блокирует доступ к ссылке. Есть ли альтернативный способ? –

+0

@ Bing.Wong Посмотрите, помогает ли редактирование. Он должен по крайней мере вытащить вас из-под земли. –

+0

спасибо за предложение, однако я получаю сообщение о том, что программный доступ к проекту vba не заслуживает доверия. –

Смежные вопросы