如何将VBA函数调用为子过程

时间:2009-07-02 02:02:17

标签: function vba ms-access access-vba office-2003

我知道对于那里的人来说这是一个简单的问题,但我从来没有真正使用过功能模块,因为我不明白它们是什么。

所以我有很多东西可以使用它(减少冗余),但我想知道如何从表单中调用sub(如按钮单击)过程。

我试过了......

Sub Command_Click()
    Call "pptCreator"
End Sub

我知道这很糟糕,但我不知道如何将其纳入程序。

5 个答案:

答案 0 :(得分:30)

以下是您可以在Microsoft Access中调用内容的一些不同方法:

从模块

调用表单子或函数

您呼叫表格中的子必须是公开的,如:

Public Sub DoSomething()
  MsgBox "Foo"
End Sub

像这样调用sub:

Call Forms("form1").DoSomething

在拨打电话之前,表格必须打开。

要调用事件过程,您应该在表单中调用公共过程,并在此公共过程中调用事件过程。

从表单

调用模块中的子例程
Public Sub DoSomethingElse()
  MsgBox "Bar"
End Sub

...只需直接从您的活动程序中调用它:

Call DoSomethingElse

从表单调用子例程而不使用事件过程

如果需要,您实际上可以将函数绑定到表单控件的事件,而无需在控件下创建事件过程。要做到这一点,首先需要在模块中使用公共函数而不是sub,如下所示:

Public Function DoSomethingElse()
  MsgBox "Bar"
End Function

然后,如果表单上有一个按钮,而不是将[事件过程]放在属性窗口的OnClick事件中,请输入:

=DoSomethingElse()

单击该按钮时,它将调用模块中的公共功能。

调用函数而不是过程

如果调用sub看起来像这样:

Call MySub(MyParameter)

然后调用函数看起来像这样:

Result=MyFunction(MyFarameter)

其中Result是函数返回的类型变量。

注意:您并不总是需要Call关键字。大多数情况下,您可以像这样调用sub:

MySub(MyParameter)

答案 1 :(得分:3)

如果pptCreator是同一文件中的函数/过程,则可以将其称为

call pptCreator()

答案 2 :(得分:3)

调用子程序 - 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
  

应用于全局变量的规则是相同的:

     

私有:如果某个过程是私有的,则可以由同一模块的其他过程调用它。外部模块的程序无法访问这样的程序。

     

此外,当某个过程是私有的时,其名称不会出现在“宏”对话框中

     

公共:作为公共创建的过程可以通过相同模块的过程和其他模块的过程来调用。

     

此外,如果某个过程是公共的,当您访问“宏”对话框时,会显示其名称,您可以从那里运行它

答案 3 :(得分:1)

传入参数时,模块中的过程开始变得有用且通用。

例如:

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

现在可以显示使用名为strMessage的字符串变量传入的任何消息。

答案 4 :(得分:0)

将功能添加到表单上的新按钮:(并避免使用宏来调用功能)

创建函数(函数MyFunctionName())后,您处于表单设计视图中:

  1. 添加一个新按钮(我认为你不能重新分配旧按钮 - 但不确定)。
  2. 当按钮向导窗口打开时,单击取消。
  3. 转到按钮属性“事件”选项卡 - “单击 - 字段”。
  4. 在该字段下拉菜单中选择:事件过程。
  5. 现在点击其中有...的下拉菜单旁边的按钮,您将进入Visual Basic窗体窗体中的 new Private Sub。
  6. 在该私有子类型中:调用MyFunctionName
    看起来应该是这样的:
  7. Private Sub Command23_Click()

    调用MyFunctionName

    End Sub

    1. 然后保存。