单击时如何获取所选文本框的名称

时间:2020-03-01 23:58:32

标签: excel vba

我试图将所选文本框的名称另存为字符串变量。 选择文本框时,需要发生这种情况。

一个框架内有100个左右的文本框。我尝试使用frame_enter()函数来触发代码,然后使用me.frame.activecontrol.name来设置变量值,但尚未使用此方法设置文本框activecontrol,因此将无法正常工作。

如果在选择文本框后使用按钮触发代码,它确实可以工作,但是我希望单击文本框后立即运行它。 我可以使用textbox_enter(),但是每个文本框都需要多行代码,因此我正在寻找更整洁的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以使用Class Module。例如,您要捕获Textbox中每个Userform上的所有点击并获取相应的名称,可以尝试:

  1. 创建名为Class Module的{​​{1}}

    clsTextbox
  2. 在您的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}}事件的工作。可以使用类处理的事件列表中将其排除在外(见下文)。

enter image description here