如何访问工作表中嵌入的Microsoft Forms 2.0 Frame内的控件
如何访问工作表中Microsoft Forms 2.0 Frame内的控件并绑定事件
问题描述
- 通过「Developer>Insert>More Controls>Microsoft Forms 2.0 Frame」在工作表中添加Frame控件,右键选择「Frame Object>Modify」后,在其中添加了文本框、组合框和命令按钮
- 目标是将Frame内控件的值填充到下方动态表格,但无法访问Frame内的命令按钮编写
CommandButton_Click()事件 - 尝试过OLEObjects和Shapes方法,但IntelliSense支持差,无法正确引用控件值,也无法创建点击事件
- 设计模式下进入Frame编辑,右键按钮无「查看代码」选项;退出设计模式后,左键可操作控件,但右键无选项,Locked属性已设为False仍无法添加事件
解决方案
1. 引用Frame内的控件值
要访问Frame内部控件,需先获取Frame的OLEObject对象,再通过其Object属性调用内部控件:
Sub AccessFrameControls() Dim frameOLE As OLEObject Dim innerFrame As MSForms.Frame ' 替换为你的工作表名称和Frame控件名称 Set frameOLE = ThisWorkbook.Worksheets("Sheet1").OLEObjects("Frame1") Set innerFrame = frameOLE.Object ' 读取文本框值(替换为你的文本框名称) Debug.Print innerFrame.TextBox1.Value ' 读取组合框值(替换为你的组合框名称) Debug.Print innerFrame.ComboBox1.Value End Sub
2. 为Frame内的命令按钮绑定点击事件
由于直接编辑Frame无法添加事件,需通过类模块实现事件绑定:
- 插入类模块,命名为
clsFrameBtnEvents - 在类模块中添加代码:
Public WithEvents targetBtn As MSForms.CommandButton Public hostSheet As Worksheet Public sourceFrame As MSForms.Frame Private Sub targetBtn_Click() ' 按钮点击逻辑:将控件值写入表格 Dim lastRow As Long lastRow = hostSheet.Cells(hostSheet.Rows.Count, "A").End(xlUp).Row + 1 ' 写入文本框内容到A列 hostSheet.Cells(lastRow, "A").Value = sourceFrame.TextBox1.Value ' 写入组合框内容到B列 hostSheet.Cells(lastRow, "B").Value = sourceFrame.ComboBox1.Value End Sub
- 在工作表代码模块中添加初始化绑定的代码:
Private eventHandlers As Collection Private Sub Worksheet_Activate() Dim frameOLE As OLEObject Dim innerFrame As MSForms.Frame Dim btn As MSForms.CommandButton Dim handler As clsFrameBtnEvents Set eventHandlers = New Collection Set frameOLE = Me.OLEObjects("Frame1") Set innerFrame = frameOLE.Object ' 绑定命令按钮(替换为你的按钮名称) Set btn = innerFrame.CommandButton1 Set handler = New clsFrameBtnEvents Set handler.targetBtn = btn Set handler.hostSheet = Me Set handler.sourceFrame = innerFrame eventHandlers.Add handler End Sub
3. 关键注意事项
- 确保Frame和内部控件的名称正确(设计模式下选中控件,可在Excel左上角名称框查看)
- 若有多个命令按钮,需循环遍历Frame内的所有按钮,逐个绑定事件
- 事件绑定代码需在工作表激活或工作簿打开时执行,确保每次打开文件都能生效
内容的提问来源于stack exchange,提问作者MrDanSmith
相关产品推荐
相关产品推荐

