Excel VBA - 记住最后一个用户表单文本框光标焦点

问题描述:

我在Excel VBA Userform上有10个文本框,当我从窗口切换(例如,在其他程序中执行其他工作)并返回时,我想要重点放在我上次使用的文本框上。Excel VBA - 记住最后一个用户表单文本框光标焦点

我认为这对于有经验的人来说应该是一个明显的问题,但我无法在任何地方找到关于此主题的问题。如果任何人都可以指示我给出正确的答案,请给我一个可搜索的主题或者一段好的代码,这将是非常好的。我是海绵,我会带任何东西。

谢谢! -Chris

+0

你想关注当前点击的文本框? –

+0

我不认为有一种方法可以轻松地做到这一点,没有GotFocus事件,这是你需要将焦点恢复到正确的控制。浸入API并使用SetwindowHooksEx + HCBT_ACTIVATE可能是一种方法。 –

光标焦点不是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。它会更好看。

+0

'Change'显然意味着这个盒子有焦点,当然......但是如果这个盒子有焦点并且没有改变,'strLastTb'就不会是正确的。 –

+0

不幸的是,如果你切换到另一个应用程序,激活不会下沉 –

+0

@ Mat'sMug&Alex K. - 你是对的,我想的是一样的,因此我编辑了答案。但是,它几乎相同:) – Vityata