MyTetra Share
Делитесь знаниями!
Как узнать существует ли модуль в книге
Время создания: 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.

Но для начала, думаю было бы не лишним привести пример кода, который проверяет наличие в книге самого 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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

'---------------------------------------------------------------------------------------

' 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


1

2

3

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

'---------------------------------------------------------------------------------------

' 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


1

2

3

Sub Check_VBComponentExists()

    MsgBox "Модуль 'Module1' " & IIf(IsModuleExists("Module2"), "существует", "отсутствует"), vbInformation

End Sub

Подобным образом можно проверить не только наличие стандартного модуля, но и любого иного компонента: модули листов и книг, модули классов и пользовательские формы. Достаточно передать в функцию имя нужного компонента.

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования