Ms access 访问vba更改子窗体中变量控件的可见性

Ms access 访问vba更改子窗体中变量控件的可见性,ms-access,vba,controls,visibility,subforms,Ms Access,Vba,Controls,Visibility,Subforms,我试图创建一个子控件,它将切换给定窗体位置中给定控件数组的可见性。我已经设法使它在主窗体上工作,但无法理解子窗体控件的语法。我正在与Access 2016合作 以下是我目前掌握的情况: Sub toggleDisappear(ByRef fields() As Variant, _ ByVal report As String, ByVal vis As Boolean, Optional ByVal sfrm As String) If IsNull(sfrm) Then F

我试图创建一个子控件,它将切换给定窗体位置中给定控件数组的可见性。我已经设法使它在主窗体上工作,但无法理解子窗体控件的语法。我正在与Access 2016合作

以下是我目前掌握的情况:

Sub toggleDisappear(ByRef fields() As Variant, _
    ByVal report As String, ByVal vis As Boolean, Optional ByVal sfrm As String)

If IsNull(sfrm) Then
    For i = 1 To UBound(fields)
        Forms(report).Controls(fields(i)).Visible = vis
    Next
Else
    For i = 1 To UBound(fields)
        Forms.Form(report).Controls(sfrm).Form.Controls(fields(i)).Visible = vis
    Next
End If

End Sub

你知道我错过了什么吗?我得到一个运行时错误438-“对象不支持此属性或方法。”

如果在VBA中键入
sFrm
作为
String
,它永远不能为空。因此,您的If语句将无法正常工作。要修复:

将程序声明更改为:

Sub toggleDisappear(ByRef fields() As Variant, _
    ByVal report As String, ByVal vis As Boolean, Optional ByVal sfrm As Variant)
然后,将If语句更改为:

If IsMissing(sfrm) Then

现在,您的代码可以判断何时未提供
sFrm

哪一行触发该错误?字符串变量不能为Null,只能使用变量类型。因此,要么将变量声明为Variant,要么测试空字符串:
如果sfrm=”“,那么
。以“Forms.Form(Report)…”开头的行触发错误。我将sfrm变量设置为variant。