You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问工作表中嵌入的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无法添加事件,需通过类模块实现事件绑定:

  1. 插入类模块,命名为clsFrameBtnEvents
  2. 在类模块中添加代码:
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
  1. 在工作表代码模块中添加初始化绑定的代码:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:43:18