Excel VBA - 记住上次用户表单文本框光标焦点

时间:2017-07-14 13:41:10

标签: excel vba excel-vba

我在Excel VBA Userform上有10个文本框,当我从窗口切换(比如,在其他程序中做其他工作)并回来时,我希望焦点在我上次的文本框上使用。

我认为对于有经验的人来说这应该是一个显而易见的问题,但我无法在任何地方找到关于这个话题的问题。如果有人能指导我一个正确的答案,给我一个可搜索的主题,或一段好的代码,这将是金色的。我是海绵,我会带点东西。

谢谢! -Chris

1 个答案:

答案 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行。它看起来会更好。