2017-06-07 138 views
0

當用戶從下拉菜單中選擇特定值時,我試圖隱藏/取消隱藏我窗體上的30個對象。我嘗試了下面的循環,但是我收到以下錯誤:'對象不支持此屬性或方法。'我有這個代碼在下拉菜單對象的'AfterUpdate'上運行。訪問For循環隱藏對象

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 

回答

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 

替代方法不使用數組:

設置控制標記屬性然後代碼遍歷窗體上的所有控件,併爲那些在標籤具有特殊價值的知名度。

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 

奉勸命名約定沒有空格或標點符號/特殊字符(下劃線唯一的例外)。

+0

是啊,它的參考。在我有Me.Controls(varVisibleList).visible之前。但同樣的錯誤發生。 EventType是窗體中的下拉菜單。我會試一試你的代碼。謝謝 – xpandamonium

+0

你想爲30個控件設置可視性?請參閱編輯以回答。 – June7

0

您正在嘗試遍歷字符串數組。

Dim VisibleVisitFields() As String 

您需要聲明數組包含變種(其中也可能包含字符串)

Dim VisibleVisitFields() As Variant