|
|||||||
Как узнать существует ли модуль в книге
Время создания: 16.03.2019 23:43
Раздел: Разные закладки - VBA - VBA управление кодами
Запись: xintrea/mytetra_db_adgaver_new/master/base/15149912600px3nauyat/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Как узнать существует ли модуль в книге
Продолжая цикл статей про работу с проектом VBA решил что будет не лишним привести пример того, как проверить существует ли определенный компонент VBA в проекте. Возможно, это пригодится при внесении изменений в коды: чтобы проверить присутствует ли нужный модуль в книге и если нет - то добавить или завершить процедуру без возникновения ошибки. Для работы с кодами VB-проекта программно необходимо, чтобы было проставлено доверие к объектной модели проекта VBA и изменяемый проект не должен быть защищен. Подробнее читайте в статье: Что необходимо для внесения изменений в проект VBA(макросы) программно Но для начала, думаю было бы не лишним привести пример кода, который проверяет наличие в книге самого VBA проекта и его доступность для внесения изменений: '--------------------------------------------------------------------------------------- ' Procedure : IsVBProjLock ' http://www.excel-vba.ru ' Purpose : Функция проверки наличия защиты у VBA проекта ' True - вернет, если проект защищен ' False - вернет, если проект доступен для внесения изменений '--------------------------------------------------------------------------------------- Function IsVBProjLock(wbCheck As Workbook) As Boolean Dim oVBProj As Object Set oVBProj = wbCheck.VBProject If Not oVBProj Is Nothing Then IsVBProjLock = (oVBProj.Protection <> 0) End If End Function Вызов функции IsVBProjLock: Sub Check_VBProjLock() MsgBox "VB проект книги " & IIf(IsVBProjLock(ActiveWorkbook), "закрыт", "доступен"), vbInformation End Sub
Если защита не установлена - функция вернет False и мы можем быть уверены в том, что в данный проект мы сможем внести изменения. ПРОВЕРКА НАЛИЧИЯ НУЖНОГО МОДУЯ '--------------------------------------------------------------------------------------- ' Procedure : IsModuleExists ' http://www.excel-vba.ru ' Purpose : Функция проверки наличия защиты у VBA проекта ' Аргументы функции: ' sModuleName - имя VBA компонента для проверки ' objVBProj - если указан, наличие компонента проверяется в указанном VBA проекте ' если не указан - в проекте активной книги ' Результат функции: ' True - вернет, если проект защищен ' False - вернет, если проект доступен для внесения изменений '--------------------------------------------------------------------------------------- Function IsModuleExists(sModuleName As String, Optional ByVal objVBProj As Object = Nothing) As Boolean If objVBProj Is Nothing Then Set objVBProj = ActiveWorkbook.VBProject End If On Error Resume Next IsModuleExists = CBool(Len(objVBProj.VBComponents(sModuleName).Name)) End Function Вызов функции IsModuleExists: Sub Check_VBComponentExists() MsgBox "Модуль 'Module1' " & IIf(IsModuleExists("Module2"), "существует", "отсутствует"), vbInformation End Sub
Подобным образом можно проверить не только наличие стандартного модуля, но и любого иного компонента: модули листов и книг, модули классов и пользовательские формы. Достаточно передать в функцию имя нужного компонента. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|