2015-02-06 47 views
3

我創建了一個日期選擇器,它允許您選擇多個日期並切換它們,因此沒有人可以在那些日子裏預定任何東西。VBA以編程方式更改對象名稱

爲了做到這一點,我有31個切換按鈕和一個月份選擇器。當您選擇月份時,31個按鈕中的每一個都必須更新,並從DLookup獲取值(在或上切換)。

目前,我已經得到了這個代碼在月選擇的

Private Sub cmbMonth_AfterUpdate() 

    If IsNull(Me.cmbMonth) Then 
     GoTo Subexit 
    Else 
     Imonth = CInt(Me.cmbMonth) 
    End If 

    Call Update_toggle(Me.Toggle1) 
    Call Update_toggle(Me.Toggle2) 
    Call Update_toggle(Me.Toggle3) 
    Call Update_toggle(Me.Toggle4) 

等更新事件一個長長的清單 - 高達31切換

是否有辦法做這個循環?

我試圖沿着線的東西:

Dim toggle as Togglebutton 
Dim I as integer 
Dim strTogglename as String 
set toggle = new togglebutton 

I = 1 

for 1 = 1 to 32 

    strtogglename = "Me.Toggle" & I 

    set toggle.name = strtogglename 

    Call Update_toggle(Toggle) 

next I 

但我無法得到它的工作。玩byrefbyval似乎沒有幫助。

+0

這種情況下'''Me''是什麼? – dee 2015-02-06 16:36:32

回答

2

您可以使用窗體的Controls收集和檢查每個控制你循環的類型。您正在尋找acToggleButton s。

Dim cntrl As Control 
For Each cntrl In Me.Controls 
    If cntrl.ControlType = acToggleButton Then 

     Update_toggle cntrl 

    End If 
Next 
+1

我個人離開舞臺到RubberDuck,他的解決方案更有效率;這是你正在尋找的答案。 – 2015-02-06 17:21:53

+1

P.s.顯然,在表單中包含其他不應該進入循環的切換按鈕的情況下,請不要忘記管理附加檢查。 – 2015-02-06 17:26:20

2

您需要存儲一個全球性的內部集合你的對象在初始化的時間,例如:

全球徵集申報

Dim allToggles As Collection 

初始化 - 存儲在集合對象

Set allToggles = New Collection 
With allToggles 
    .Add Me.Toggle1 
    .Add Me.Toggle2 
    '... 
    .Add Me.Toggle31 
End With 

調用迴路

for I = 1 to 32 

    Update_toggle allToggles(I) 

next I 
+0

不錯的答案,但它可以做得更簡單。 – RubberDuck 2015-02-06 17:19:51

1

在循環中,您可以將控件的名稱派生爲"Toggle" & I。因此,您可以通過在表單的Controls集合中通過名稱引用該項目來針對相應的控件對象

'for 1 = 1 to 32 
For I = 1 to 31 
    Call Update_toggle(Me.Controls("Toggle" & I)) 
Next I 
相關問題