假设我的 VBA 表单中有一个普通的 TextBox,它是使用交互式表单编辑器和工具箱创建的。当我连接一个伴随事件处理程序时,类似
Private Sub Fooo_Exit(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox "Hi there!"
End Sub
它按预期工作。没有比这更容易的了。在这种情况下,文本框是框架内的一个项目,DinosaurSection。
现在假设我创建了一些文本框(Fooo1、Fooo2、Fooo3 等),代码如下
Set obj = Me.DinosaurSection.Controls.Add("Forms.TextBox.1", "Fooo" & num)
With obj
.top = top
.Left = 400
.Width = 70
.height = 18
End With
并创建一系列相同类型的退出处理程序,每个文本框一个
Private Sub Fooo3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox "Hi there!"
End Sub
这些不会按预期触发。就好像这些处理程序没有在表单本身“注册”一样。
我需要做什么才能让生成的文本框触发退出事件处理程序?所有事件都以同样的方式处理吗?
作为一种解决方法,现在我创建了一系列(实际上是 50 个)FoooNN 文本框,这些文本框都像汽车残骸一样堆积在表单底部,以及它们的退出处理程序。直到运行时才知道文本框的确切数量。
然后,代码只抓取一个预先存在的文本框并相应地定位它。额外的文本框设置为不可见。
Set obj = Me.DinosaurSection.Controls("Fooo" & num)
With obj
.top = top
.Left = 400
...
End With