Excel VBA-记住上次用户表单文本框光标焦点
我在Excel VBA用户窗体上有10个文本框,当我离开窗口(例如,在不同的程序中执行其他工作)并返回时,我希望焦点集中在上次使用的文本框上 我认为对于一个有经验的人来说,这应该是一个显而易见的问题,但是我在任何地方都找不到一个关于这个话题的被问得很好的问题。如果有人能给我一个正确的答案,给我一个可搜索的主题,或者一段好的代码,那将是非常棒的。我是一块海绵,我愿意接受任何东西 谢谢大家!!Excel VBA-记住上次用户表单文本框光标焦点,vba,excel,Vba,Excel,我在Excel VBA用户窗体上有10个文本框,当我离开窗口(例如,在不同的程序中执行其他工作)并返回时,我希望焦点集中在上次使用的文本框上 我认为对于一个有经验的人来说,这应该是一个显而易见的问题,但是我在任何地方都找不到一个关于这个话题的被问得很好的问题。如果有人能给我一个正确的答案,给我一个可搜索的主题,或者一段好的代码,那将是非常棒的。我是一块海绵,我愿意接受任何东西 谢谢大家!! -Chris光标焦点在VBA中不是一个事件,因此要做到这一点有点困难但是您可以使用\u Change事件并
-Chris光标焦点在VBA中不是一个事件,因此要做到这一点有点困难但是您可以使用
\u Change
事件并记住上次更改的文本框
,它与您想要的非常接近
在模块中需要一个公共变量,作为上次更改的文本框的名称。因此,下次激活表单时,您可以使用一个简单的选择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
通常,您可以创建一个连接
文本框和数字的函数,因此,如果您有50个文本框
,则不需要写100行。而且它看起来会更好。您想关注当前单击的文本框吗?我认为没有办法轻松做到这一点,因为没有GotFocus事件,您需要将焦点恢复到正确的控件。使用API并使用SetwindowHooksEx+HCBT_激活可能是一种方法。Change
显然意味着盒子有焦点,当然。。。但是如果框有焦点并且没有更改,strLastTb
将不正确。不幸的是,如果切换到另一个框,Activate将不会下沉application@Mat自鸣得意&亚历克斯·K.-是的,你是对的,我也在想同样的问题,因此我编辑了答案。但是,这几乎是一样的:)我强烈建议不要给控件编号,不要为它们使用有意义的名称,例如CustomerNameBox
,AccountIdBox
,等等,然后在调用.SetFocus
控件之前,使用表单的控件集合按名称检索控件;这避免了Select Case
,也不会让维护人员怀疑客户名称框应该是TextBox12
还是TextBox8
。当然最好是Public LastTb As TextBox
/set LastTb=TextBox2
,但它仍然需要一个事件来触发,而且没有。