我在Excel VBA Userform上有10个文本框,当我从窗口切换(比如,在其他程序中做其他工作)并回来时,我希望焦点在我上次的文本框上使用。
我认为对于有经验的人来说这应该是一个显而易见的问题,但我无法在任何地方找到关于这个话题的问题。如果有人能指导我一个正确的答案,给我一个可搜索的主题,或一段好的代码,这将是金色的。我是海绵,我会带点东西。
谢谢! -Chris
答案 0 :(得分:0)
光标焦点不是VBA中的事件,因此执行它有点困难。 但是您可以使用_Change
事件并记住上次更改的Textbox
,这非常接近您想要的。
您需要模块中的公共变量,以获取上次更改的TextBox的名称。因此,下次激活表单时,您可以使用简单的select case
并使用.SetFocus
到表单的相应名称。下面的代码适用于两个TextBox。
表格形式:
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
,则不需要编写100行。它看起来会更好。