我试图将所选文本框的名称另存为字符串变量。 选择文本框时,需要发生这种情况。
一个框架内有100个左右的文本框。我尝试使用frame_enter()
函数来触发代码,然后使用me.frame.activecontrol.name
来设置变量值,但尚未使用此方法设置文本框activecontrol,因此将无法正常工作。
如果在选择文本框后使用按钮触发代码,它确实可以工作,但是我希望单击文本框后立即运行它。
我可以使用textbox_enter()
,但是每个文本框都需要多行代码,因此我正在寻找更整洁的解决方案。
答案 0 :(得分:0)
您可以使用Class Module
。例如,您要捕获Textbox
中每个Userform
上的所有点击并获取相应的名称,可以尝试:
创建名为Class Module
的{{1}}
clsTextbox
在您的Option Explicit
Public WithEvents tb As MSForms.TextBox
Private Sub tb_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single)
'// change this code to what you want done in Textbox name //
MsgBox tb.Name & " was selected."
End Sub
中初始化所有Userform
并将其传递给您的班级。
TextBox
现在,每当您单击表单中的任何Option Explicit
Private allTextbox() As clsTextbox
Private Sub UserForm_Initialize()
Dim fC As MSForms.Control, tbCnt As Long
With Me
For Each fC In .Controls
If TypeOf fC Is MSForms.TextBox Then
tbCnt = tbCnt + 1
ReDim Preserve allTextbox(1 To tbCnt)
Set allTextbox(tbCnt) = New clsTextbox
Set allTextbox(tbCnt).tb = fC
End If
Next
End With
End Sub
时,都会出现Textbox
提示。
我玩了一下,似乎没有做出{{ 1}}事件的工作。可以使用类处理的事件列表中将其排除在外(见下文)。