Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
Vba 多页用户表单中的文本框退出事件_Vba_Excel_Exit_Multipage - Fatal编程技术网

Vba 多页用户表单中的文本框退出事件

Vba 多页用户表单中的文本框退出事件,vba,excel,exit,multipage,Vba,Excel,Exit,Multipage,我有多页用户表单,它有子多页。文本框退出事件不起作用。当userform退出时,文本框退出事件起作用。因此,我尝试了更新后事件。它工作正常,但如果输入的值不是数字,我无法设置文本框的焦点。代码运行良好。userform不显示previos页面文本框。 下面是屏幕截图和代码 在第4页,我有一个文本框,输入详细信息后,我单击第2页继续。在此之前,我需要检查输入的数据是否为数字。如果不是数字,我必须显示第4页,并关注文本框1,以重新输入不起作用的详细信息。请帮帮我,伙计们 Private Sub

我有多页用户表单,它有子多页。文本框退出事件不起作用。当userform退出时,文本框退出事件起作用。因此,我尝试了更新后事件。它工作正常,但如果输入的值不是数字,我无法设置文本框的焦点。代码运行良好。userform不显示previos页面文本框。 下面是屏幕截图和代码



在第4页,我有一个文本框,输入详细信息后,我单击第2页继续。在此之前,我需要检查输入的数据是否为数字。如果不是数字,我必须显示第4页,并关注文本框1,以重新输入不起作用的详细信息。请帮帮我,伙计们

Private Sub TextBox3_AfterUpdate()
  If Len(UserForm1.TextBox3.Value) <> 0 And _ 
    IsNumeric(UserForm1.TextBox3.Value) = False Then
    UserForm1.MultiPage1.Value = 0
    userform1.multipage2.value = 1
    UserForm1.TextBox3.SetFocus
    MsgBox "Only Numbers are Allowed!!"

  End If
End Sub
Private子文本框3\u AfterUpdate()
如果Len(UserForm1.TextBox3.Value)为0且
IsNumeric(UserForm1.TextBox3.Value)=False然后
UserForm1.MultiPage1.Value=0
userform1.multipage2.value=1
UserForm1.TextBox3.SetFocus
MsgBox“只允许数字!!”
如果结束
端接头

代码没有显示错误,但它不关注文本框,仍然显示了Pay2。

< P>可以考虑使用KEKDOWN事件来防止非数字输入与这样的“/P>”一起出现。
“”允许检查numlock
将私有函数GetKeyState Lib“user32”(ByVal nVirtKey长度)声明为整数
私人建设资本(长=20)
私有常量ksNumLock的长度=144
私有子文本框1u KeyDown(ByVal键代码为MSForms.ReturnInteger,ByVal移位为Integer)
选择大小写键代码
案例vbKeyBack、vbKeyDelete、vbKeyLeft、vbKeyRight、vbKeyInsert、vbKeyNumlock
“”允许删除、移动、更改numlock
案例Asc(0)至Asc(9)
“”如果输入是一个数字,而不是一个符号,则保留它
如果Shift Eqv未获取KeyState(ksNumLock),则KeyCode=0
案例Asc(“-”)
“”允许使用负片
如果InStr(1,Me.TextBox1.Text,“-”>0或Me.TextBox1.SelStart>0,则让KeyCode=0
案例Asc(“.”)
“”允许小数
如果InStr(1,Me.TextBox1.Text,“.”>0,则让KeyCode=0
其他情况
”“什么也不允许
设KeyCode=0
结束选择
端接头

可以考虑使用KEKDOWN事件来防止非数字输入与这样的

一起使用。
“”允许检查numlock
将私有函数GetKeyState Lib“user32”(ByVal nVirtKey长度)声明为整数
私人建设资本(长=20)
私有常量ksNumLock的长度=144
私有子文本框1u KeyDown(ByVal键代码为MSForms.ReturnInteger,ByVal移位为Integer)
选择大小写键代码
案例vbKeyBack、vbKeyDelete、vbKeyLeft、vbKeyRight、vbKeyInsert、vbKeyNumlock
“”允许删除、移动、更改numlock
案例Asc(0)至Asc(9)
“”如果输入是一个数字,而不是一个符号,则保留它
如果Shift Eqv未获取KeyState(ksNumLock),则KeyCode=0
案例Asc(“-”)
“”允许使用负片
如果InStr(1,Me.TextBox1.Text,“-”>0或Me.TextBox1.SelStart>0,则让KeyCode=0
案例Asc(“.”)
“”允许小数
如果InStr(1,Me.TextBox1.Text,“.”>0,则让KeyCode=0
其他情况
”“什么也不允许
设KeyCode=0
结束选择
端接头

消息框中断设置焦点

显示消息框(窗口)会中断
SetFocus
代码。为了解决这个问题,只需在通过隐藏后重新显示userform

Me.Hide: Me.Show
另一种方法是通过标签显示错误消息

使用原始代码修改示例:

Private Sub TextBox3_AfterUpdate()
If Len(Me.TextBox3.Value) <> 0 And _
   IsNumeric(Me.TextBox3.Value) = False Then
     Me.MultiPage1.Value = 0
     MsgBox "Only Numbers are allowed!!"
     Me.MultiPage2.Value = 1
     Me.TextBox3.SetFocus

     Me.Hide: Me.Show     ' << work around by redisplaying userform
End If
End Sub
Private子文本框3\u AfterUpdate()
如果Len(Me.TextBox3.Value)0和_
IsNumeric(Me.TextBox3.Value)=则为False
Me.MultiPage1.Value=0
MsgBox“只允许数字!!”
Me.MultiPage2.Value=1
Me.TextBox3.SetFocus

Me.Hide:Me.Show'消息框中断设置焦点

显示消息框(窗口)会中断
SetFocus
代码。为了解决这个问题,只需在通过隐藏后重新显示userform

Me.Hide: Me.Show
另一种方法是通过标签显示错误消息

使用原始代码修改示例:

Private Sub TextBox3_AfterUpdate()
If Len(Me.TextBox3.Value) <> 0 And _
   IsNumeric(Me.TextBox3.Value) = False Then
     Me.MultiPage1.Value = 0
     MsgBox "Only Numbers are allowed!!"
     Me.MultiPage2.Value = 1
     Me.TextBox3.SetFocus

     Me.Hide: Me.Show     ' << work around by redisplaying userform
End If
End Sub
Private子文本框3\u AfterUpdate()
如果Len(Me.TextBox3.Value)0和_
IsNumeric(Me.TextBox3.Value)=则为False
Me.MultiPage1.Value=0
MsgBox“只允许数字!!”
Me.MultiPage2.Value=1
Me.TextBox3.SetFocus

Me.Hide:Me.Show'你确定你把这些都放在了正确的用户表单中吗?您的代码指示Userform1,但图像指示UserForm2您遇到了什么错误?您试图用
UserForm1.MultiPage1.Value=0做什么?这不应该是类似于
UserForm1.MultiPage1.TextBox1.Value=0
?@Xabier我没有收到任何错误。[link](UserForm1.MultiPage1.Value=0)通过此链接,我试图在用户表单中显示或导航多页页面1。因为一旦我在文本框中输入值,如果我点击另一个多页,比如说多页第2页,这将出现,然后我想导航到文本框,如果它不是一个numeric@TaylorScott它是userform1,此处显示的屏幕截图仅供参考。在文本框中输入正确值后,userform事件中是否也有导航到第2页的代码?有时用户表单事件会以意外的顺序触发……您确定您将所有这些都放在了正确的用户表单中吗?您的代码指示Userform1,但图像指示UserForm2您遇到了什么错误?您试图用
UserForm1.MultiPage1.Value=0做什么?这不应该是类似于
UserForm1.MultiPage1.TextBox1.Value=0
?@Xabier我没有得到任何信息