0

假设我的 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
4

0 回答 0