Существуют два основных типа модулей:
- "/ Процедурные Стандарт" модули
- модули класса
"Документ" модули (например, ThisWorkbook
, Sheet1
и т.д.) просто специальные типы модулей классов. То же самое для модулей «UserForm», которые в основном представляют собой классы с экземпляром по умолчанию и дизайнером.
Члены модуля класса не существуют во время выполнения; класс - это не что иное, как чертеж для объекта - поэтому вам нужно либо создать объект этого типа (класс определяет тип), либо использовать существующий.
ThisWorkbook
является пример категории Workbook
; Sheet1
- это экземпляр класса Worksheet
. Chart1
- экземпляр класса Chart
; UserForm1
- пример класса UserForm
. И так далее.
Если вы новый модуль класса и назовите его Class1
и добавьте публичную процедуру к нему:
Public Sub DoSomething()
MsgBox "Something!"
End Sub
Тогда для того, чтобы вызвать DoSomething
вам нужен экземпляр из Class1
:
Dim foo As Class1
Set foo = New Class1
foo.DoSomething
Если DoSomething
находится в модуле ThisWorkbook
, вы можете назвать его, присвоив имя метода объекту, в котором он существует, так как w как уже упоминалось в комментариях, и в другом ответе:
ThisWorkbook.DoSomething
Если DoSomething
реализован в стандартном/процедурный модуль, то нет объекта, процедура существует в глобальном масштабе, и вы можете просто сделать это:
DoSomething
Однако открытые члены процедурных модулей также подвергаются, как макросов (Public Sub
) и пользовательских функций (Public Function
), которые вы, возможно, не захотите делать.
Если вам нужен процедурный модуль с открытыми членами, который можно вызывать только из кода VBA (а не нажатием кнопки на листе или путем ввода формулы в ячейке), вы можете указать Option Private Module
наверху :
Option Private Module
Public Sub DoSomething()
' DoSomething is not exposed as a macro,
' but can be called from anywhere in the VBA project.
End Sub
Префикс thisworkbook перед вашим подзаголовком. Вызовите ThisWorkbook.Main() – cyboashu
^^, но используя 'Call ThisWorkbook.Main (« Test »)' или, проще говоря, 'ThisWorkbook.Main" Test ". – YowE3K