Как вызвать функцию VBA в подпроцедуру
Я знаю, что это простой вопрос для кого-то там, но я никогда не использовал функциональный модуль вообще, потому что я не понимал, что они были.
Так что у меня есть целая куча вещей, для которых я могу использовать это (сократить избыточность), но я хочу знать, как я вызываю в форму (например, нажатие кнопки) процедуру из формы.
Я попробовал это...
Sub Command_Click()
Call "pptCreator"
End Sub
Я знаю, что это довольно плохо, но я понятия не имею, как сделать это в процедуре.
5 ответов
Вот несколько разных способов называть вещи в Microsoft Access:
Чтобы вызвать подпрограмму или функцию из модуля
Подпункт в форме, которую вы вызываете, ДОЛЖЕН быть общедоступным, как в:
Public Sub DoSomething()
MsgBox "Foo"
End Sub
Назовите субмарину так:
Call Forms("form1").DoSomething
Форма должна быть открыта до совершения звонка.
Чтобы вызвать процедуру события, вы должны вызвать открытую процедуру в форме и вызвать процедуру события в этой открытой процедуре.
Вызов подпрограммы в модуле из формы
Public Sub DoSomethingElse()
MsgBox "Bar"
End Sub
... просто позвоните прямо из процедуры вашего мероприятия:
Call DoSomethingElse
Вызов подпрограммы из формы без использования процедуры события
Если вы хотите, вы можете фактически связать функцию с событием элемента управления формы без необходимости создания процедуры события под элементом управления. Чтобы сделать это, вам сначала нужна открытая функция в модуле, а не подпрограмма, например:
Public Function DoSomethingElse()
MsgBox "Bar"
End Function
Затем, если у вас есть кнопка в форме, вместо того, чтобы помещать [Процедура обработки события] в событие OnClick окна свойств, поместите это:
=DoSomethingElse()
Когда вы нажимаете кнопку, она вызывает публичную функцию в модуле.
Чтобы вызвать функцию вместо процедуры
Если вызов подпрограммы выглядит следующим образом:
Call MySub(MyParameter)
Тогда вызов функции выглядит так:
Result=MyFunction(MyFarameter)
где Result - переменная типа, возвращаемого функцией.
ПРИМЕЧАНИЕ. Вам не всегда нужно ключевое слово Call. В большинстве случаев вы можете просто вызвать сабвуфер так:
MySub(MyParameter)
Если pptCreator - это функция / процедура в том же файле, вы можете вызвать ее, как показано ниже
call pptCreator()
Вызов подпроцедуры - 3-х сторонняя техника
Если у вас есть процедура, независимо от того, создали ли вы ее или она является частью языка Visual Basic, вы можете использовать ее. Использование процедуры также называется ее вызовом.
Прежде чем вызывать процедуру, вы должны сначала найти раздел кода, в котором вы хотите ее использовать. Чтобы вызвать простую процедуру, введите ее имя. Вот пример:
Sub CreateCustomer()
Dim strFullName As String
strFullName = "Paul Bertrand Yamaguchi"
msgbox strFullName
End Sub
Sub Exercise()
CreateCustomer
End Sub
Помимо использования имени процедуры для ее вызова, вы также можете добавить к ней ключевое слово Call. Вот пример:
Sub CreateCustomer()
Dim strFullName As String
strFullName = "Paul Bertrand Yamaguchi"
End Sub
Sub Exercise()
Call CreateCustomer
End Sub
При вызове процедуры, без или без ключевого слова Call, вы можете дополнительно ввести открывающую и закрывающую скобки справа от ее имени. Вот пример:
Sub CreateCustomer()
Dim strFullName As String
strFullName = "Paul Bertrand Yamaguchi"
End Sub
Sub Exercise()
CreateCustomer()
End Sub
Процедуры и уровни доступа
Как и переменный доступ, доступ к процедуре может контролироваться уровнем доступа. Процедура может быть частной или публичной. Чтобы указать уровень доступа к процедуре, поставьте перед ним ключевое слово Private или Public. Вот пример:
Private Sub CreateCustomer()
Dim strFullName As String
strFullName = "Paul Bertrand Yamaguchi"
End Sub
Правила, которые были применены к глобальным переменным, одинаковы:
Личный: если процедура сделана частной, она может вызываться другими процедурами того же модуля. Процедуры внешних модулей не могут получить доступ к такой процедуре.
Кроме того, когда процедура является закрытой, ее имя не отображается в диалоговом окне "Макросы".
Public: процедура, созданная как public, может вызываться процедурами того же модуля и процедурами других модулей.
Кроме того, если процедура была создана как общедоступная, при доступе к диалоговому окну "Макросы" появляется ее имя, и вы можете запустить ее оттуда.
Процедуры в модуле становятся полезными и общими, когда вы передаете аргументы.
Например:
Public Function DoSomethingElse(strMessage As String)
MsgBox strMessage
End Function
Теперь может отображать любое сообщение, переданное с помощью строковой переменной с именем strMessage.
Чтобы добавить функцию к новой кнопке в вашей форме: (и избегайте использования макроса для вызова функции)
После того, как вы создали свою функцию (Function MyFunctionName()) и вы находитесь в представлении дизайна формы:
- Добавить новую кнопку (я не думаю, что вы можете переназначить старую кнопку - хотя не уверен).
- Когда откроется окно мастера кнопок, нажмите Отмена.
- Перейдите в свойства кнопки.
- В этих полях из выпадающего меню выберите: Событие.
- Теперь нажмите на кнопку рядом с выпадающим меню, в котором есть..., и вы попадете в новую Private Sub в окне форм Visual Basic.
- В этом частном типе Sub: Call MyFunctionName
Это должно выглядеть примерно так:
Private Sub Command23_Click ()
Вызов MyFunctionName
End Sub
- Тогда просто сохраните это.