Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Navigation Excel VBA用户表单导航难题_Navigation_Runtime Error_Userform_Keyboard Events_Setfocus - Fatal编程技术网

Navigation Excel VBA用户表单导航难题

Navigation Excel VBA用户表单导航难题,navigation,runtime-error,userform,keyboard-events,setfocus,Navigation,Runtime Error,Userform,Keyboard Events,Setfocus,这是大约3年多前提出的问题,但没有给出有效的解决方案: 我有一个用户表单,希望在输入正确的数据后自动导航到下一个文本框(例如,如果我知道文本框的正确字符数为2,则在输入两个字符后,它会自动移动到下一个文本框) 我的问题是错误检查,例如,如果有人在3个字段中的第一个字段中输入出生日期,然后输入32,该怎么办。然后我需要一个消息框,告诉他们输入1到31之间的2位数字,清空字段并返回焦点,这样就可以有效地停止进程,直到他们输入正确的数据 第二种可能的情况是,他们输入0,然后尝试切换到下一个文本框。我

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

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

我的问题是错误检查,例如,如果有人在3个字段中的第一个字段中输入出生日期,然后输入32,该怎么办。然后我需要一个消息框,告诉他们输入1到31之间的2位数字,清空字段并返回焦点,这样就可以有效地停止进程,直到他们输入正确的数据

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

问题是它不会这样做

Setfocus被制表符顺序中的下一个字段取代,无论我尝试什么,它都会自动获得焦点(我尝试了很多方法,包括前面文章中给出的所有解决方案)

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

你好,马克,你呢

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
Private子文本框1_Change()
Dim inputVal作为字符串
inputVal=TextBox1.Value
如果Len(inputVal)=2,则
如果是数字(inputVal),则
如果输入值如何

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
Private子文本框1_Change()
Dim inputVal作为字符串
inputVal=TextBox1.Value
如果Len(inputVal)=2,则
如果是数字(inputVal),则

如果inputVal感谢Viktor,那么更改当然是一个更好的地方,然后退出错误检查并解决我的问题(我想是新手犯的错误)。它解决了我的问题,除非用户返回空格两次以删除单元格内容,或者我按语法将内容设置为“”。然后,该控件似乎保持焦点,但光标不在该控件上,因此用户必须单击该控件才能重新租用。即使我将其内容设置为“”以使其重试,是否有任何解决方法使光标显示在所讨论的控件中?@MarkStephens--不确定问题出在哪里。如果tbox1的内容字面上是“”(两个双引号),则表示2个字符,而不是一个数字,从而触发警告。如果你指的是两个相同的空格。如果他们回溯2x得到一个空白值,这是一件有点不同的事情,但是如果len(xxx)=0,你总是可以做的,那么msgbox'something'谢谢Viktor,我们可以在明天开会时讨论,你能在下午来Uxbridge吗?谢谢Viktor,当然,更改是一个更好的地方,然后退出错误检查并解决我的问题,(我猜是新手犯的错误)。它解决了我的问题,除非用户返回空格两次以删除单元格内容,或者我按专业语法将内容设置为“”。然后该控件似乎保持焦点,但光标不在该控件上,因此用户必须单击该控件才能重新租用。即使我将其内容设置为“让他们再试一次”,是否有任何解决方法使光标显示在所讨论的控件中?@MarkStephens--不确定问题出在哪里。如果tbox1的内容确实是”(两个双引号)这是2个字符,不是一个数字,因此会触发警告。如果你指的是两个相同的空格。如果它们回溯2x得到一个空白值,这是一件有点不同的事情,但是如果len(xxx)是=0那么msgbox'something'谢谢Viktor,我们明天见面时再讨论,你下午能来Uxbridge吗?