首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参考工作表中框架中的控件。

参考工作表中框架中的控件。
EN

Stack Overflow用户
提问于 2017-06-03 06:56:49
回答 1查看 1.7K关注 0票数 3

我有Class Module,我使用它来处理Click事件。我使用Macro3()将事件与框架T1上的按钮链接起来,它可以工作。

我有上百个框架(ActiveX控件),其名称类似于T1,T2,T3...

如何引用每个帧中的控件?我试过ActiveSheet.Shapes("T1").Controls("title_pic_tog")。它不起作用。如果我们能做到这一点,那么我可以使用一个变量来替换Shapes("t1")

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-03 07:45:00

在类模块中(例如Class1)

代码语言:javascript
复制
Option Explicit

Public WithEvents cBox As MSForms.ToggleButton

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

在模块中

代码语言:javascript
复制
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

截图

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44341254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档