2015-01-17 2 views
7

Я пытаюсь найти способ компиляции кода в VBA на открытой рабочей книге. Я могу сделать это вручную, открыв среду VBA, перейдя в Debug и «Compile VBAProject», но задавался вопросом, есть ли способ сделать это с помощью кода каждый раз, когда открывается рабочая книга.Могу ли я скомпилировать VBA на рабочей книге?

Целью этого является загрузка кода в память компьютеров, чтобы предотвратить компиляцию из-за использования некоторых объектов Active X. Как уже упоминалось, я могу сделать это вручную, и это решает проблему, однако, поскольку есть много пользователей, которые используют это, а рабочая книга защищена паролем, не все будут иметь доступ к опции отладки.

+0

Если это не так, то кто-нибудь знает, где хранятся скомпилированные файлы? Я думаю, что вместо компиляции новой рабочей книги было бы не просто отправить всех пользователей эти скомпилированные файлы и предоставить инструкции, где эти файлы должны храниться в каталоге temp? – Examorph

+0

Спасибо, Маттео, это не очень срочно, просто у меня было много проблем во многих книгах, включая мой текущий проект. Я с нетерпением жду вашего решения. – Examorph

+0

Там вы идете, это ответ. Я только что тестировал один из моих проектов и, похоже, работает нормально. Не стесняйтесь указывать на возможные недостатки, это первый раз, когда я тоже что-то пробовал. –

ответ

11

Я думаю, вы можете попытаться сделать это, автоматизировав VBE (редактор Visual Basic).

ТРЕБОВАНИЕ:

вы должны пойти в Excel/File/Options/Trust Center/Trust Center settings и установите флажок Trust access to the VBA project object model (по соображениям безопасности это по умолчанию отключено, и если вы не проверить его код ниже будет поднимать во время выполнения ошибка 1004 programmatic access to visual basic project is not trusted). Ясно, что вам нужно только сделать это один раз (на каждом компьютере, который вы хотите выполнить автоматическую компиляцию, конечно).

КОДИРОВАНИЕ:

Ваша команда инструкция бар (т.е. "Compile VBA Project") находится внутри объекта VBE Заявки Excel, в частности, в панели команд:

Dim objVBECommandBar As Object 
Set objVBECommandBar = Application.VBE.CommandBars 

Объект будет теперь содержат всю командную строку редактора Visual Basic. В частности, вы ищете кнопку ID 578, которая на самом деле является «компиляцией проекта VBA» (вы можете поместить наблюдателя в переменную и просмотреть все внутри локального окна, вы можете захотеть найти другую команд). Следовательно, подытожить:

Set compileMe = objVBECommandBar.FindControl(Type:=msoControlButton, ID:=578) 
compileMe.Execute 

Это позволит компилировать проект. Как вы просили, вы просто положили это на событие «Открытая рабочая книга»:

Private Sub ThisWorkbook_Open() 
    Set compileMe = objVBECommandBar.FindControl(Type:=msoControlButton, ID:=578) 
    compileMe.Execute 'the project should hence be compiled 
End Sub 
+0

Большое вам спасибо за это, вы решили большую часть моей проблемы. Теперь я пытаюсь понять, как это сделать с заблокированной книгой, так как в таких книгах опция debug-> compile отключена. Знаете ли вы, каким образом можно сохранить параметр компиляции во время блокировки кода? – Examorph

+0

Это другой вопрос, я предлагаю вам открыть другой поток (как из-за того, что хорошо отделить проблемы для других пользователей, так и потому, что я не могу следить за вами, не будет дома в течение следующих 24 часов;) –

+0

Будет делать , спасибо за вашу помощь в этом. – Examorph

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