gpt4 book ai didi

excel - 单击事件不适用于以编程方式/动态创建的选项按钮

转载 作者:行者123 更新时间:2023-12-04 21:29:08 26 4
gpt4 key购买 nike

我有以下代码以编程方式/动态创建一个框架并添加一个选项按钮:

Private Sub ComboBox1_Change()

Dim cb1234Frame As MsForms.Frame
Dim opbtn1 As MsForms.OptionButton

Set cb1234Frame = RT_Graph_Form.Controls.Add("Forms.Frame.1")

With cb1234Frame
.Top = 132
.Left = 12
.Height = 30
.Width = 144
.Caption = "Number of Graphs to Display"
End With

Set opbtn1 = cb1234Frame.Controls.Add("Forms.OptionButton.1")

With opbtn1
.Top = 6
.Left = 6
.Height = 18
.Width = 21.75
.Caption = "1"
End With

End Sub

但这不起作用:
Private Sub opbtn1_Click()

MsgBox "Test Successful!!"

End Sub

最佳答案

问题是事件处理程序需要在编译时绑定(bind):您不能为动态创建的控件创建事件处理程序。

添加一个新的类(class)模块到你的项目,叫它DynamicOptionButton .此类的作用是包装 MSForms 控件并对其进行编译时引用:

Option Explicit
Private WithEvents Wrapper As MSForms.OptionButton

Public Sub Initialize(ByVal ctrl As MSForms.OptionButton)
Set Wrapper = ctrl
End Sub

Private Sub Wrapper_Click()
MsgBox "Works!"
End Sub

请注意,只有一部分事件可用于处理:哪些事件可用,取决于您声明包装器引用的接口(interface) - MSForms.Control有许多事件(和属性), MSForms.OptionButton还有另一组:您可能需要声明两个接口(interface)(即同一对象的 2 个包装器)才能访问所有成员。

现在在表单的声明部分中,您需要保存对所有包装器的引用,否则对象将超出范围并且处理程序将无法工作。一个 Collection可以这样做:
Option Explicit
Private ControlWrappers As Collection

Private Sub UserForm_Initialize()
Set ControlWrappers = New Collection
End Sub

'...

Private Sub CreateOptionButton()
Dim ctrl As MSForms.OptionButton
Set ctrl = Me.Controls.Add("Forms.OptionButton.1")
'set properties...

Dim wrap As DynamicOptionButton
Set wrap = New DynamicOptionButton
wrap.Initialize ctrl

ControlWrappers.Add wrap
End Sub

注意不要在表单自己的代码隐藏中引用表单的类名:全局范围 RT_Graph_Form identifier 是指 VBA 控制的“默认实例”自动实例化对象,它可能是也可能不是正在显示的实际表单实例。您想将动态控件添加到 Me.Controls ,而不是 RT_Graph_Form.Controls .

现在,我们可以处理在运行时产生的控件事件,但是还有另一个问题: DynamicOptionButton 中的事件处理程序。类没有引用它所在的表单!

或者是吗?

每个 MSForms 控件都有一个 Parent属性(property);你可以得到 parent UserForm通过递归上升 Parent属性,直到返回的引用是 UserForm - 从那里你可以访问所有公开的东西。

关于excel - 单击事件不适用于以编程方式/动态创建的选项按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59200690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com