访问循环隐藏对象

时间:2017-06-07 15:52:51

标签: ms-access access-vba

当用户从下拉菜单中选择某些值时,我正试图隐藏/取消隐藏表单上的30个对象。我尝试了下面的循环,但是我收到以下错误:'对象不支持此属性或方法。我在下拉菜单对象的'AfterUpdate'上运行此代码。

Dim VisibleVisitFields() As String
Dim VisibleVisitFieldlist As String
Dim varVisibleVisit As Variant
VisibleVisitFieldlist = "VisitDate_Event,VisitTime_Event,VisitSite_Event,VisitStaff_Event,VisitMeet_Event"
VisibleVisitFields = Split(VisibleVisitFieldlist, ",")

If (EventType = 3) Then
    For Each varVisibleVisit In VisibleVisitFields
    [Forms]![subFRM_TBL_Event-All in One].Controls(varVisibleVisit).visible = True
    Exit For
Next
Else
If (EventType <> 3) Then
    For Each varVisibleVisit In VisibleVisitFields
    [Forms]![subFRM_TBL_Event-All in One].Controls(varVisibleVisit).visible = False
    Exit For
Next
End If
End If

2 个答案:

答案 0 :(得分:1)

哪一行触发错误?怀疑它是指有缺陷的子表单。从未见过这样的代码来循环遍历数组。建议命名子窗体容器与它所拥有的对象不同,例如ctrEvent。什么是EventType - 表单上的文本框/字段?考虑代码:

Dim aryFields As Variant
Dim x As Integer
aryFields = Split("VisitDate_Event,VisitTime_Event,VisitSite_Event,VisitStaff_Event,VisitMeet_Event", ",")
For x = 0 To UBound(aryFields)
    Me.ctrEvent.Form.Controls(aryFields(x)).Visible = Me.EventType = 3
Next

不使用数组的替代方法:

设置控件Tag属性然后代码循环遍历窗体上的所有控件,并为Tag中具有特定值的那些控件设置可见性。

Dim ctrl As Control
For Each ctrl in Me.ctrEvent.Form.Controls
    If ctrl.Tag = "something" Then ctrl.Visibility = Me.EventType = 3
Next

另一个是给控件类似名称,如:Visit1,Visit2等。然后代码:

Dim x As Integer
For x = 1 to 30
    Me.ctrEvent.Form.Controls("Visit" & x).Visible = Me.EventType = 3
Next 

在命名约定中不建议使用空格或标点符号/特殊字符(仅限下划线异常)。

答案 1 :(得分:0)

您正在尝试迭代字符串数组。

Dim VisibleVisitFields() As String

您需要声明数组包含变体(仍可包含字符串)

Dim VisibleVisitFields() As Variant