2

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

我正在为正在使用的选项卡控件创建“OnChange”事件,我想将不确定数量的整数传递给函数。即: =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

So one change you would say '=RefreshControlTab([DevForm],3,4)' and when the 3rd or 4th tab is selected a refresh will be performed.

4

1 回答 1

3

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

这对我来说听起来很像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是一个 Variant 值数组。因此,在函数中,您需要验证值是数字以避免麻烦......一个麻烦的例子是在使用字符串值调用函数时出现“类型不匹配”错误:AddThem("a", "b")

于 2013-10-08T15:12:21.287 回答