2017-06-01 161 views
1

讓我們先說說我的代碼知識最多是有限的。我通常理解這些概念,但從未很好地實施它們。這就是說,這裏是一個項目的代碼片段,它落在我的腿上。在Microsoft Access中使用VBA中的通配符

Option Compare Database 
Private Sub Form_Current() 
If IsNull(Me![OPT-78 (5900EL)]) Then 
    Me![OPT-78 (5900EL)].Visible = False 
    Me![OPT-78 (5900EL) Label].Visible = False 
Else 
    Me![OPT-78 (5900EL)].Visible = True 
    Me![OPT-78 (5900EL) Label].Visible = True 
End If 
If IsNull(Me![OPT-78 (7900EL)]) Then 
    Me![OPT-78 (7900EL)].Visible = False 
    Me![OPT-78 (7900EL) Label].Visible = False 
Else 
    Me![OPT-78 (7900EL)].Visible = True 
    Me![OPT-78 (7900EL) Label].Visible = True 
End If 
If IsNull(Me![OPT-152 (4310B)]) Then 
    Me![OPT-152 (4310B)].Visible = False 
    Me![OPT-152 (4310B) Label].Visible = False 
Else 
    Me![OPT-152 (4310B)].Visible = True 
    Me![OPT-152 (4310B) Label].Visible = True 
End If 

這是位於「當前」事件中的窗體內部。現在我知道通配符可以將所有這些如果其他語句限制爲簡單優雅的單個if語句解決方案,但我無法讓它們工作。我試過*,%,__和?,但沒有運氣。還有更多的if else語句必須寫出來,所以我希望有一個更清晰的解決方案。

謝謝!

+0

也許'Select'語句可以在工作,縮短您的代碼位? – UnseenSpecter

回答

1

我想通過創建一個小組來處理設置可見啓動:

Sub SetVis(controlName as String) 
    Dim vis as Boolean 
    vis = Not IsNull(Me.Controls(controlName)) 
    Me.Controls(controlName).Visible = vis 
    Me.Controls(controlName & " Label").Visible = vis 
End sub 

然後你就可以驅動子從一個循環,也許通過遍歷窗體的Controls集合找到感興趣的人。基於名字的固定陣列上

Dim c 
For Each c in Me.Controls 
    'some If statement here to see if this is a control you're interested in 
    'Might also want to check that the control type is a textbox so you can 
    ' skip the labels 
    If c.Name like "OPT*" And Not c.Name like "*Label" Then 
     SetVis CStr(c.Name) 
    End if 
Next c 

或者一個簡單的循環:

Dim c 
For Each c In Array("OPT-78 (5900EL)", "OPT-78 (7900EL)", "OPT-152 (4310B)") 
    SetVis CStr(c) 
Next c 
+0

注意(也是@Nogg)如果一個標籤附加到它的文本框中,你只需要設置文本框可見/不可見,標籤會自動相應地設置。 – Andre

+0

謝謝你們。 @ Andre:我發現標籤在文本框的後面關閉了旋轉的可見性,但是當我稍後將其翻轉回來時,它不會。不知道爲什麼。 @Tim:我正在查看你發佈的代碼,我想知道這是否允許我獲取不同名稱的文本框的名稱。換句話說,我嘗試抓取文本框OPT-1,OPT-12A,OPT-435,並根據其內部的值是否爲空來打開和關閉它們。我不太熟悉如何設置循環和whiles。大約8年前,我參加了一個非常基礎的編程課程。 ;) – Nogg

+0

看到我上面的編輯(所有未經測試,但應該給你的一般想法) –