Excel VBA – 记住最后一个用户窗体文本框光标焦点

我在Excel VBA Userform中有10个文本框,当我从窗口切换(例如,在其他程序中执行其他工作)并返回时,我想将焦点放在我上次使用的文本框上。

我认为这对于一个有经验的人来说应该是一个明显的问题,但是在任何地方我都找不到一个关于这个主题的问题。 如果任何人都可以指导我一个正确的答案,给我一个可search的主题,或一个很好的代码,这将是金。 我是海绵,我会拿东西的。

谢谢! -克里斯

光标焦点不是VBA中的事件,因此执行它有点困难。 但是你可以使用_Change事件,并记住最后一个改变的Textbox ,这是非常接近你想要的。

您需要一个模块中的公共variables,用于上次更改的文本框的名称。 因此,下一次激活表单时,您可以使用一个简单的select case并使用.SetFocus指定表单的相应名称。 下面的代码适用于两个文本框。

forms如下:

 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 

一般来说,你可以创build一个连接TextBox&Digit的函数,所以如果你有50个TextBox&Digit ,你不需要写100行。 它会更好看。