Excel 为什么它会给我一个不匹配的错误?
当提示用户提供我的excel文档的概览时,我让他们输入一个介于1和10之间的数字。子测试是消除1到10之外的字符串和数字。这艘潜艇有效。如果用户第一次输入数字1到10,该程序就像一个符咒。但是,如果用户先输入字符串,然后输入1-10之间的整数,则会弹出一个错误。这是一个运行时错误13类型不匹配。我已经把弹出的错误行注释掉了。然而,电子邮件仍然可以通过。另外,如果你能解释为什么我必须重新定义我的秩整数,那也会有帮助。Option Explicit不像我在书中读到的那样工作。非常感谢。如果你有任何问题,请告诉我Excel 为什么它会给我一个不匹配的错误?,excel,runtime-error,vba,Excel,Runtime Error,Vba,当提示用户提供我的excel文档的概览时,我让他们输入一个介于1和10之间的数字。子测试是消除1到10之外的字符串和数字。这艘潜艇有效。如果用户第一次输入数字1到10,该程序就像一个符咒。但是,如果用户先输入字符串,然后输入1-10之间的整数,则会弹出一个错误。这是一个运行时错误13类型不匹配。我已经把弹出的错误行注释掉了。然而,电子邮件仍然可以通过。另外,如果你能解释为什么我必须重新定义我的秩整数,那也会有帮助。Option Explicit不像我在书中读到的那样工作。非常感谢。如果你有任何问
Option Explicit
Private Sub CommandButton1_Click()
Dim OutApp As Object
Dim OutMail As Object
Dim RANK As Long
Call Test
RANK = UserForm1.TextBox1.Value '((((THIS IS THE LINE THAT PROMPTS THE ERROR)))
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = "(my email is inserted here)"
.CC = ""
.BCC = ""
.Subject = "Create Database Overall Ranking"
.Body = "The rank a company gave me was a " & RANK & "."
.send
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
Unload UserForm1
End Sub
Sub Test()
Dim MyVar, MyCheck
Dim RANK As Long
MyVar = UserForm1.TextBox1.Text ' Assign value.
MyCheck = IsNumeric(MyVar) ' Returns True.
If MyCheck = True Then
RANK = UserForm1.TextBox1.Value
If RANK > 10 Or RANK < 1 Then
MsgBox "Please input a number between 1 and 10.", vbOKOnly, "Invalid Number"
UserForm1.TextBox1.Text = ""
On Error Resume Next
Unload UserForm1
UserForm1.Show
Else
End If
Else
MsgBox "Please input a number and not text.", vbOKOnly, "Invalid Input"
UserForm1.TextBox1.Text = ""
On Error Resume Next
Unload UserForm1
UserForm1.Show
End If
End Sub
选项显式
私有子命令按钮1_单击()
Dim OutApp作为对象
将邮件变暗为对象
淡而无味
呼叫测试
RANK=UserForm1.TextBox1.Value'((这是提示错误的行)))
Set-OutApp=CreateObject(“Outlook.Application”)
OutApp.Session.Logon
Set-OutMail=OutApp.CreateItem(0)
出错时继续下一步
发邮件
.To=“(我的电子邮件插入此处)”
.CC=“”
.BCC=“”
.Subject=“创建数据库总体排名”
.Body=“公司给我的排名是“&rank&”
邮寄
以
错误转到0
发送邮件=无
设置应用程序=无
卸载UserForm1
端接头
子测试()
我的支票
淡而无味
MyVar=UserForm1.TextBox1.Text“赋值”。
MyCheck=IsNumeric(MyVar)'返回True。
如果MyCheck=True,则
RANK=UserForm1.TextBox1.Value
如果等级>10或等级<1,则
MsgBox“请输入一个介于1和10之间的数字”,vbOKOnly,“无效数字”
UserForm1.TextBox1.Text=“”
出错时继续下一步
卸载UserForm1
UserForm1.Show
其他的
如果结束
其他的
MsgBox“请输入数字而不是文本”,vbOKOnly,“无效输入”
UserForm1.TextBox1.Text=“”
出错时继续下一步
卸载UserForm1
UserForm1.Show
如果结束
端接头
编辑:工作的代码
我让它工作了……这是代码。我刚刚做了测试,以确保它是一个数字,然后我将数字作为字符串运行
Private Sub CommandButton1_Click()
Dim OutApp As Object
Dim OutMail As Object
Dim SurveyNum As String
Call Test
SurveyNum = UserForm1.TextBox1.Text
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = "(MY EMAIL HERE)"
.CC = ""
.BCC = ""
.Subject = "Create Database Overall Ranking"
.Body = "The rank a company gave me was a " & SurveyNum & "."
.send
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
Unload UserForm1
End Sub
Sub Test()
Dim MyVar, MyCheck
Dim SurveyNum2 As Double
MyVar = UserForm1.TextBox1.Text ' Assign value.
MyCheck = IsNumeric(MyVar) ' Returns True.
If MyCheck = True Then
SurveyNum2 = UserForm1.TextBox1.Value
If SurveyNum2 > 10 Or SurveyNum2 < 1 Then
MsgBox "Please input a number between 1 and 10.", vbOKOnly, "Invalid Number"
UserForm1.TextBox1.Text = ""
On Error Resume Next
Unload UserForm1
UserForm1.Show
Else
End If
Else
MsgBox "Please input a number and not text.", vbOKOnly, "Invalid Input"
UserForm1.TextBox1.Text = ""
On Error Resume Next
Unload UserForm1
UserForm1.Show
End If
End Sub
Private子命令按钮1\u单击()
Dim OutApp作为对象
将邮件变暗为对象
作为字符串的Dim SurveyNum
呼叫测试
SurveyNum=UserForm1.TextBox1.Text
Set-OutApp=CreateObject(“Outlook.Application”)
OutApp.Session.Logon
Set-OutMail=OutApp.CreateItem(0)
出错时继续下一步
发邮件
.To=“(我的电子邮件在此)”
.CC=“”
.BCC=“”
.Subject=“创建数据库总体排名”
.Body=“一家公司给我的排名是“&SurveyNum&”
邮寄
以
错误转到0
发送邮件=无
设置应用程序=无
卸载UserForm1
端接头
子测试()
我的支票
双精度测量仪2
MyVar=UserForm1.TextBox1.Text“赋值”。
MyCheck=IsNumeric(MyVar)'返回True。
如果MyCheck=True,则
SurveyNum2=UserForm1.TextBox1.Value
如果SurveyNum2>10或SurveyNum2<1,则
MsgBox“请输入一个介于1和10之间的数字”,vbOKOnly,“无效数字”
UserForm1.TextBox1.Text=“”
出错时继续下一步
卸载UserForm1
UserForm1.Show
其他的
如果结束
其他的
MsgBox“请输入数字而不是文本”,vbOKOnly,“无效输入”
UserForm1.TextBox1.Text=“”
出错时继续下一步
卸载UserForm1
UserForm1.Show
如果结束
端接头
有一些事情可能会引起问题
Rank是VBA中已经存在的一个函数。对于用户定义的内容,使用相同的名称可能会遇到问题。尽管我不认为这是导致错误的原因
我认为问题在于将RANK声明为long。据我所知,long数据类型是一个整数。如果传递给此数据类型的值不是整数,则可能是罪魁祸首
我将重命名rank变量,并将其重新定义为double,然后看看这对您有什么作用
用代码编辑
我成功地修复了代码。我不知道到底是什么导致了问题,但我更改了一些项目
Option Explicit
Private Sub CommandButton1_Click()
Dim OutApp As Object
Dim OutMail As Object
Dim SurveyNum As Double
If Test = True Then
SurveyNum = UserForm1.TextBox1.Value
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = "(my email is inserted here)"
.CC = ""
.BCC = ""
.Subject = "Create Database Overall Ranking"
.Body = "The rank a company gave me was a " & SurveyNum & "."
.send
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
Unload UserForm1
End If
End Sub
Function Test() As Boolean
Dim MyVar As Double
Dim MyCheck As Boolean
MyVar = UserForm1.TextBox1.Value ' Assign value.
MyCheck = IsNumeric(MyVar) ' Returns True.
If MyCheck = True Then
If MyVar > 10 Or MyVar < 1 Then
MsgBox "Please input a number between 1 and 10.", vbOKOnly, "Invalid Number"
UserForm1.TextBox1.Value = ""
On Error Resume Next
Test = False
Else
Test = True
End If
Else
MsgBox "Please input a number and not text.", vbOKOnly, "Invalid Input"
UserForm1.TextBox1.Value = ""
On Error Resume Next
Test = False
End If
End Function
选项显式
私有子命令按钮1_单击()
Dim OutApp作为对象
将邮件变暗为对象
双倍暗测量
如果Test=True,则
SurveyNum=UserForm1.TextBox1.Value
Set-OutApp=CreateObject(“Outlook.Application”)
OutApp.Session.Logon
Set-OutMail=OutApp.CreateItem(0)
出错时继续下一步
发邮件
.To=“(我的电子邮件插入此处)”
.CC=“”
.BCC=“”
.Subject=“创建数据库总体排名”
.Body=“一家公司给我的排名是“&SurveyNum&”
邮寄
以
错误转到0
发送邮件=无
设置应用程序=无
卸载UserForm1
如果结束
端接头
函数Test()为布尔值
双重模糊MyVar
将MyCheck设置为布尔值
MyVar=UserForm1.TextBox1.Value'赋值。
MyCheck=IsNumeric(MyVar)'返回True。
如果MyCheck=True,则
如果MyVar>10或MyVar<1,则
MsgBox“请输入一个介于1和10之间的数字”,vbOKOnly,“无效数字”
UserForm1.TextBox1.Value=“”
出错时继续下一步
测试=错误
其他的
测试=真
如果结束
其他的
MsgBox“请输入数字而不是文本”,vbOKOnly,“无效输入”
UserForm1.TextBox1.Value=“”
出错时继续下一步
测试=错误
如果结束
端函数
设置邮件时,请将其设置为邮件项,而不仅仅是CreateItem(0)。与设置邮件=新建OUtlook.MailItem类似,这不起作用。设置邮件=新建OUtlook.MailItem使用调试器并告诉我们是哪一行导致了重新创建的邮件的问题