【问题标题】:Excel VBA User form navigation conundrumExcel VBA 用户表单导航难题
【发布时间】:2020-12-23 05:23:50
【问题描述】:

这是大约 3 年前提出的,但没有给出有效的解决方案:

Set focus on UserForm Textbox on tabbing from another Textbox

我有一个用户表单,希望在输入正确的数据输入后自动导航到下一个文本框(例如,如果我知道文本框的正确字符数是 2,那么在两个已输入字符,它会自动移动到下一个文本框)。

我的问题是错误检查,例如,如果有人在出生日期的 3 个字段中的第一个输入出生日期,然后他们输入 32。然后我想要一个消息框告诉他们输入1 到 31 之间的 2 位数字,清空该字段并将焦点返回给它,从而有效地停止该过程,直到他们输入正确的数据。

第二种可能的情况是他们输入 0 然后尝试跳到下一个文本框。然后我会想要同样的东西。

问题是它不会这样做。

Setfocus 被选项卡顺序中的下一个字段取代,无论我尝试什么,它都会自动获得焦点(我尝试了很多东西,包括前面帖子中给出的所有解决方案)。

有人知道如何解决这个问题吗?

问候,马克

【问题讨论】:

    标签: navigation runtime-error userform keyboard-events setfocus


    【解决方案1】:

    怎么样

    Private Sub TextBox1_Change()
    Dim inputVal As String
    inputVal = TextBox1.Value
        If Len(inputVal) = 2 Then
            If IsNumeric(inputVal) Then
                If inputVal <= 31 And CInt(inputVal) = CDbl(inputVal) Then
                    TextBox2.SetFocus
                Else
                    MsgBox ("Must be <=31 and integer")
                End If
            Else
                MsgBox ("Must be a number")
            End If
        End If
    End Sub
    

    通常您可以使用 _change() 来控制正在发生的事情,因此您可以说“如果 tb1.value = 0 then”...或者您可以使用类似的逻辑将值限制为一定的长度(不超过 2 个字符)或控制它们是数字等。

    【讨论】:

    • 感谢 Viktor,当然 Change 是一个比 Exit 更好的地方进行错误检查并解决了我的问题,(我猜是新手错误)。它解决了我的问题,除非用户退格两次以删除单元格内容,或者我以编程方式将内容设置为“”。然后控件似乎保持焦点,但光标不在控件上,因此用户必须单击它才能重新租用,是否有任何解决方法可以让光标显示在相关控件中,即使我将其内容设置为“ "让他们再试一次?
    • @MarkStephens -- 不确定问题出在哪里。如果 tbox1 的内容字面上是“”(两个双引号),即 2 个字符而不是数字,则会触发警告。如果您的意思是两个相同的空间。如果他们回溯 2x 以得到一个空白值,这有点不同,但如果 len(xxx) = 0 then msgbox 'something' 你总是可以这样做
    • 谢谢 Viktor,我们明天见面可以商量,你下午能来阿克斯桥吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多