我在 Excel VBA 用户窗体上有 10 个文本框,当我离开窗口(例如,在不同的程序中执行其他工作(并返回时,我希望焦点放在我上次使用的文本框上。
我认为对于有经验的人来说,这应该是一个显而易见的问题,但我在任何地方都找不到关于这个话题的好问题。如果有人能指导我找到一个正确的答案,给我一个可搜索的主题,或者一段好的代码,那将是黄金。我是一块海绵,我会拿任何东西。
谢谢! -克里斯
光标焦点不是 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
的函数,因此如果您有 50TextBoxes
,则不需要编写 100 行。而且看起来会更好。