循环隐藏对象的访问



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

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

哪条线触发错误?怀疑它是指缺点的子形式。从来没有看到这样的代码来循环通过数组。建议命名子形式容器不同于其所容纳的对象,例如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

替代方法不使用数组:

设置控制标签属性,然后通过表单上的所有控件进行代码循环,并为在标签中具有特定值的人设置可见性。

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 

在命名约定中不建议没有空间或标点符号/特殊字符(仅强调例外(。

您正在尝试通过一系列字符串迭代。

Dim VisibleVisitFields() As String

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

Dim VisibleVisitFields() As Variant

最新更新