2017-06-03 38 views
2

我有Class Module,我用它來處理Click事件。我使用Macro3()將事件與框架T1上的按鈕鏈接起來,並且它可以工作。請參閱工作表中的框架中的控件

我有一百個框架(ActiveX控件),名稱如T1,T2,T3...

如何引用每個框架中的控件?我試過ActiveSheet.Shapes("T1").Controls("title_pic_tog")。它不起作用。如果我們能做到這一點,那麼我可以使用一個變量來代替Shapes("t1")

Option Explicit 
Public WithEvents cBox As MSForms.ToggleButton 

Private Sub cBox_Click() 
    msgbox("clicked") 
    'End If 
End Sub 

Sub Macro3() 
    Set title_pic_tob_Event_Coll = New Collection 

    Set title_pic_tob_Event = New titlepictog 
    Set title_pic_tob_Event.cBox = ActiveSheet.t1.Controls("title_pic_tog") 
    title_pic_tob_Event_Coll.Add title_pic_tob_Event 
End sub 

回答

1

在類模塊(說Class1

Option Explicit 

Public WithEvents cBox As MSForms.ToggleButton 

Private Sub cBox_Click() 
    MsgBox ("clicked") 
End Sub 

在模塊

Dim TBArray() As New Class1 

Private Sub Sample() 
    Dim i As Integer, FrmBCtl As OLEObject, TBCtl As Variant 
    Dim ws As Worksheet 

    '~~> Change this to the relevant worksheet 
    Set ws = Sheet2 

    '~~> Loop through all objects in the worksheet 
    For Each FrmBCtl In ws.OLEObjects 
     '~~> Check if the oleobject is a frame 
     If TypeName(FrmBCtl.Object) = "Frame" Then 
      '~~> Loop through all controls in the frame 
      For Each TBCtl In FrmBCtl.Object.Controls 
       i = i + 1 
       ReDim Preserve TBArray(1 To i) 
       Set TBArray(i).cBox = TBCtl 
      Next TBCtl 
     End If 
    Next FrmBCtl 

    Set FrmBCtl = Nothing 
    Set TBCtl = Nothing 
End Sub 

截圖 enter image description here