【问题标题】:Passing parameters in VBA events在 VBA 事件中传递参数
【发布时间】:2013-10-15 12:31:00
【问题描述】:

虽然我在 VB 方面确实有一些经验,但我对 Access 还是比较陌生,我的问题可能很简单,尽管我似乎不知道要搜索的术语以找到我可以使用的答案。

我正在为我正在使用的选项卡控件创建“OnChange”事件,我想将不确定数量的整数传递给函数。 IE: =myFunction(1,4,6) =myFunction(ArrayList[1,2,4])

我会创建一个重载函数来处理这些数字,或者如果可能的话,我想将它们作为整数数组传递。虽然对于我的生活,我无法弄清楚如何做到这一点。我走这条路的原因是让我的函数尽可能通用,基本上只需要改变我发送给函数的数字来改变它的行为。

这是我尝试做的一些粗略编码,虽然除了=myFunction([Form])之类的东西我不知道如何传递任何东西

Public Function Refresh(tabsToCheck As ArrayList)

    For Each o In tabsToCheck
        If Me.DevForm.Value = o Then
            RefreshAllForms
        End If
    Next o

End Function

Public Function RefreshAllForms()
    Dim f As Form
    For Each f In Access.Forms
        f.Refresh
    Next
End Function

更新


我想我会更新我的最终代码,以防将来有人需要它,感谢您的帮助!

 Public Function RefreshControlTab(ctrl As Access.Control, ParamArray TabsToRefresh())
    Dim i As Long
    Dim lngUBound As Long

    If UBound(TabsToRefresh) >= 0 Then
        lngUBound = UBound(TabsToRefresh)
        For i = 0 To lngUBound
            If ctrl.Value = (TabsToRefresh(i) - 1) Then
            RefreshAllForms
            End If
        Next
    End If
End Function


Public Function RefreshAllForms()
    Dim f As Form
    For Each f In Access.Forms
        f.Refresh
    Next
End Function

所以一个改变你会说'= refreshcontroltab([devform],3,4)'以及选择3rd或第4选项卡时,将执行刷新。

【问题讨论】:

  • 你能提供OnChange事件的代码吗?另外,您在哪里确定应该传递给Refresh 子例程的整数列表?
  • Onchange 将类似于 =Refresh(1, 2, 4) 的语法使我无法理解,因为我对访问还很陌生。这些数字将由我为数据库中的每个选项卡控件手动输入。这基本上可以做到,所以“全部刷新”只发生在我传递给刷新函数的选项卡上。如果新选项卡值 == 我传递给它的数字之一,那么它将执行刷新,否则它什么也不做。

标签: ms-access vba ms-access-2010


【解决方案1】:

“我想向函数传递一些不确定数量的整数。”

对我来说,这听起来像是 ParamArray。请参阅下面的简单功能。它将返回一组数字的总和。

Public Function AddThem(ParamArray MyNumbers()) As Long
    Dim i As Long
    Dim lngReturn As Long
    Dim lngUBound As Long

    If UBound(MyNumbers) >= 0 Then
        lngUBound = UBound(MyNumbers)
        For i = 0 To lngUBound
            lngReturn = lngReturn + MyNumbers(i)
        Next
    End If
    AddThem = lngReturn
End Function

注意ParamArray 是一个变量值数组。因此,在函数中,您需要验证值是否为数字以避免麻烦......麻烦的一个例子是在使用字符串值调用函数时出现 "type mismatch" 错误:AddThem("a", "b")

【讨论】:

  • 太棒了,这肯定会让我走上正确的道路,现在这就是我的新手问题发挥作用的地方。如何从事件中传递这些数字,是否只是 '=myFunction("1" , "2" , "3")' 减去引号。
  • @Newd 试试=MyFunction(Array(1,2,3))
  • 我会尝试一下,在编写和测试的过程中,虽然有人可以告诉我“AddThem = lngReturn”的基本功能吗? (一般来说,不只是在这种情况下)
  • "AddThem = lngReturn" 将 lngReturn 指定为函数的返回值。 (VBA 中没有Return somevalue 语法。)
  • 在我看来,您的解决方案也应该从问题转向答案。并在系统允许时接受那个。我对赞成票很好,不需要接受。再次欢呼。
猜你喜欢
  • 2016-12-28
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多