【发布时间】:2021-07-01 03:54:46
【问题描述】:
是否可以为同一工作簿中的多个文本框设置一个更改事件过程? 例如,如果我在工作簿的第一张、第二张和第三张表中有一个名为“textbox3”的文本框,我希望下面的这个单一代码适用于所有这些(文本框),而不是必须在每个上声明它床单。现在,我必须在所有工作表上声明相同的程序,但我只想声明一次,因为它对所有工作表都执行相同的操作。
'my procedure
Sub testObj()
Dim i As Integer, obj As oleobject
Set ac = ThisWorkbook.ActiveSheet
For Each obj In ac.oleobjects
If TypeName(obj.Object) = "TextBox" And obj.name = "TextBox3" Then
i = i + 1
ReDim Preserve TextArray(1 To i)
Set TextArray(i).TextBoxEvents = obj
End If
Next obj
Set obj = Nothing
结束子
'My class1
Public WithEvents TextBoxEvents As MSForms.TextBox
'Public WithEvents TextBoxEvents As OLEObject
Private Sub TextBoxEvents_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyTab Then
TextBox12.Activate
End If
End Sub
【问题讨论】:
-
改为在模块中声明它,确保它是公共的而不是私有的,然后将文本框控件作为每个表单事件的参数传递给它。
-
通常你会使用一个 control array 来做这样的事情:例如见siddharthrout.com/index.php/2018/01/15/vba-control-arrays
-
您的建议是否适用于工作表?这些文本框不在表单上
-
它的工作方式与表单相同。仅供参考,如果您想用问题标记我,那么您可以添加
@TimWilliams,我会收到通知... -
@TimWilliams ,我无法让它在工作表上工作。你能举个例子吗?
标签: vba