【问题标题】:access vba change visibility of a variable control in a subform访问 vba 更改子表单中变量控件的可见性
【发布时间】:2018-06-06 16:42:54
【问题描述】:

我正在尝试创建一个 sub 来切换给定表单位置中给定控件数组的可见性。我已经设法使它在主窗体上工作,但无法弄清楚子窗体控件的语法。我正在使用 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 -“对象不支持此属性或方法。”

【问题讨论】:

  • 哪一行触发了这个错误?字符串变量不能保持 Null,只有 Variant 类型可以。因此,要么将变量声明为 Variant,要么测试空字符串:If sfrm = "" Then
  • 我以为是这样,但事实并非如此。以“Forms.Form(Report)...”开头的行会触发错误。我将 sfrm 变量设置为变量。

标签: ms-access vba controls visibility subforms


【解决方案1】:

如果您在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多