将代码添加到动态添加到用户代码中的帧的命令按钮

时间:2009-04-27 12:27:02

标签: excel-vba vba excel

这是一个vba问题。我发现了一个问题: “使用VBA将控件添加到Excel用户窗体中的帧” 并使用其方法在我的用户表单中向我的框架添加命令按钮。由于我添加了四个命令按钮,我在循环中运行代码,并使用

 With ...
      .Name = "commandbutton" & x

为每个命令按钮指定自己的名称。我在每个命令按钮的代码宏中都包含了(因为我重命名了它们,我知道每个cb的名称是什么)但是当我点击按钮时,没有任何反应。

或者,如果有人可以向我解释如何使用代码将表单上的控件放入框架中,我可以用不同的方式解决我的问题。

谢谢,

迈克尔

1 个答案:

答案 0 :(得分:0)

似乎事件只处理在编译VBA程序时声明的对象变量(即在设计时)。如果在程序中动态创建对象(即在运行时),则需要分配引用将这些对象转换为已经声明的适当对象变量。

根据您的示例,在与您的UserForm相关的模块中,您需要:

Public WithEvents btn1 As MSForms.CommandButton
Public WithEvents btn2 As MSForms.CommandButton
Public WithEvents btn3 As MSForms.CommandButton
Public WithEvents btn4 As MSForms.CommandButton

(变量类型的MSForms前缀可能不是绝对必要的)

然后在你的With语句中创建控件,你需要将每个控件分配给一个最终变得相当混乱的变量。

更好的解决方案:

  • 在设计时创建最大数量的可能按钮,只需切换Visible属性以显示正确的按钮
  • 如果在运行时确定每个按钮的功能,则使用CommandButton对象的某些属性来确定(例如Caption属性,Tag属性)然后具有该按钮的事件处理程序根据该属性调用适当的函数
  • 更改用户界面并使用ListBoxComboBox代替按钮