См Чтобы управления в кадре, в рабочем листе

Обновить

December 2018

Просмотры

511 раз

2

У меня есть Class Module, и я использую его для обработки Clickсобытия. Я использую , Macro3()чтобы связать события с кнопкой на раме , T1и она работает.

У меня есть сотни кадров (ActiveX Control) с именами типа 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 ответы

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

Скриншот введите описание изображения здесь