Как вызвать функцию VBA в процедуру Sub

Я знаю, что это простой вопрос для кого-то, но я никогда не использовал функциональный модуль вообще, потому что я не понимал, что это такое.

Итак, у меня есть целая куча вещей, которые я могу использовать для сокращения (сокращения избыточности), но я хочу знать, как я звоню в процедуру sub (как кнопка) из формы.

Я пробовал это...

Sub Command_Click()
    Call "pptCreator"
End Sub

Я знаю, что это очень плохо, но я понятия не имею, как привести это в процедуру.

Ответы

Ответ 1

Вот несколько способов, которыми вы можете называть вещи в Microsoft Access:

Вызов формы или функции формы из модуля

Суб в форме, которую вы вызываете, ДОЛЖЕН быть общедоступным, например:

Public Sub DoSomething()
  MsgBox "Foo"
End Sub

Вызовите sub так:

Call Forms("form1").DoSomething

Форма должна быть открыта перед выполнением вызова.

Чтобы вызвать процедуру события, вы должны вызвать общедоступную процедуру в форме и вызвать процедуру события в этой общедоступной процедуре.

Вызов подпрограммы в модуле из формы

Public Sub DoSomethingElse()
  MsgBox "Bar"
End Sub

... просто вызовите его непосредственно из процедуры вашего события:

Call DoSomethingElse

Вызов подпрограммы из формы без использования процедуры события

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

Public Function DoSomethingElse()
  MsgBox "Bar"
End Function

Затем, если у вас есть кнопка в форме, вместо того, чтобы помещать [Event Procedure] в событие OnClick окна свойств, поместите это:

=DoSomethingElse()

Когда вы нажмете кнопку, она вызовет публичную функцию в модуле.

Вызов функции вместо процедуры

Если вызов sub выглядит следующим образом:

Call MySub(MyParameter)

Затем вызов функции выглядит следующим образом:

Result=MyFunction(MyFarameter)

где Result - это переменная типа, возвращаемого функцией.

ПРИМЕЧАНИЕ. Вам не всегда нужно ключевое слово Call. В большинстве случаев вы можете просто вызвать sub так:

MySub(MyParameter)

Ответ 2

если 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

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

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: процедура, созданная как общедоступная, может вызываться процедурами того же модуля и процедурами других модулей.

Кроме того, если процедура была создана как общедоступная, когда вы открываете диалоговое окно "Макросы", появляется его имя, и вы можете запустить его там

Ответ 4

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

Например:

Public Function DoSomethingElse(strMessage As String)  
    MsgBox strMessage
End Function

Теперь можно отобразить любое сообщение, которое передается со строковой переменной strMessage.

Ответ 5

Добавить функцию К новой кнопке в вашей форме: (и не использовать функцию макроса для вызова)

После того, как вы создали свою функцию (функция MyFunctionName()), и вы находитесь в режиме проектирования формы:

  • Добавить новую кнопку (я не думаю, что вы можете переназначить старую кнопку - не уверен, хотя).
  • Когда откроется окно мастера кнопок, нажмите "Отмена".
  • Перейдите на вкладку "Свойства свойства кнопки" - в поле "Щелчок".
  • В раскрывающемся меню полей выберите: Процедура события.
  • Теперь нажмите кнопку рядом с выпадающим меню, в котором есть..., и вы попадете в новый Private Sub в окне формы Visual Basic.
  • В этом Private Sub type: Call MyFunctionName
    Он должен выглядеть примерно так:

Private Sub Command23_Click()

Вызов MyFunctionName

Конец Sub

  • Затем просто сохраните его.