Excel VBA - 记住最后一个用户表单文本框光标焦点
我在Excel VBA Userform上有10个文本框,当我从窗口切换(例如,在其他程序中执行其他工作)并返回时,我想要重点放在我上次使用的文本框上。Excel VBA - 记住最后一个用户表单文本框光标焦点
我认为这对于有经验的人来说应该是一个明显的问题,但我无法在任何地方找到关于此主题的问题。如果任何人都可以指示我给出正确的答案,请给我一个可搜索的主题或者一段好的代码,这将是非常好的。我是海绵,我会带任何东西。
谢谢! -Chris
光标焦点不是VBA中的事件,因此执行它有点困难。 但是您可以使用_Change
事件并记住最后更改的Textbox
,这与您想要的非常接近。
您需要一个模块中的公共变量,用于上次更改的文本框的名称。因此,下次启动表格时,您可以使用简单的select case
并使用.SetFocus
来表格的相应名称。下面的代码适用于两个文本框。
形式:
Option Explicit
Private Sub TextBox1_Change()
strLastTb = "TextBox1"
End Sub
Private Sub TextBox2_Change()
strLastTb = "TextBox2"
End Sub
Private Sub UserForm_Activate()
Select Case strLastTb
Case "TextBox1"
TextBox1.SetFocus
Case "TextBox2"
TextBox2.SetFocus
End Select
End Sub
在一个模块:
Option Explicit
Public strLastTb As String
在一般情况下,你可以创建串接TextBox&Digit
功能,这样你就不会被要求写数百行,如果你有50 TextBoxes
。它会更好看。
'Change'显然意味着这个盒子有焦点,当然......但是如果这个盒子有焦点并且没有改变,'strLastTb'就不会是正确的。 –
不幸的是,如果你切换到另一个应用程序,激活不会下沉 –
@ Mat'sMug&Alex K. - 你是对的,我想的是一样的,因此我编辑了答案。但是,它几乎相同:) – Vityata
你想关注当前点击的文本框? –
我不认为有一种方法可以轻松地做到这一点,没有GotFocus事件,这是你需要将焦点恢复到正确的控制。浸入API并使用SetwindowHooksEx + HCBT_ACTIVATE可能是一种方法。 –