Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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 - Fatal编程技术网

自定义错误处理vba

自定义错误处理vba,vba,Vba,我有一个单元格,它是一个嵌套的if和if错误。我不想在公式中粘贴我的vlookup 5次。相反,我希望用宏检查错误。特殊情况是0或1 我写这个函数是为了得到vlookup的值 Public Function ValidateRealization(value As String) Dim validate As String If value = "#N/A" Or value = "#VALUE!" Or value or = "#REF!" Or value = "#DIV/0!" Or v

我有一个单元格,它是一个嵌套的if和if错误。我不想在公式中粘贴我的vlookup 5次。相反,我希望用宏检查错误。特殊情况是0或1

我写这个函数是为了得到vlookup的值

Public Function ValidateRealization(value As String)
Dim validate As String
If value = "#N/A" Or value = "#VALUE!" Or value or = "#REF!" Or value = "#DIV/0!" Or value = "#NUM!" Or value = "#NAME?" Or value = "#NULL!" Or value = "0" Or value = "1" Then
    validate = ""
Else
    validate = value 
End If


ValidateRealization = validate
End Function
但是,我知道当我设置该值时,可以对其进行改进,以百分比表示的格式将被覆盖


有更好的方法吗?可能通过获取活动单元格范围,并设置value属性?

您引入的是字符串而不是值,因此返回的是字符串

将参数设置为变量并测试错误:

Public Function ValidateRealization(value) As Variant
Dim validate As Variant

If Not IsError(value) Then
    If value = 0 Or value = 1 Then
        validate = ""
    Else
        validate = value
    End If
Else
    validate = ""
End If


ValidateRealization = validate
End Function

可简化为:

Public Function ValidateRealization(value) As Variant
ValidateRealization = ""
 If Not IsError(value) Then
    If Not (value = 0 Or value = 1) Then
        ValidateRealization = value
    End If
End If
End Function

您引入的是字符串而不是值,因此返回的是字符串

将参数设置为变量并测试错误:

Public Function ValidateRealization(value) As Variant
Dim validate As Variant

If Not IsError(value) Then
    If value = 0 Or value = 1 Then
        validate = ""
    Else
        validate = value
    End If
Else
    validate = ""
End If


ValidateRealization = validate
End Function

可简化为:

Public Function ValidateRealization(value) As Variant
ValidateRealization = ""
 If Not IsError(value) Then
    If Not (value = 0 Or value = 1) Then
        ValidateRealization = value
    End If
End If
End Function
两点:首先,您有未定义的
eValue
。转到模块顶部,添加行
选项Explicit
。然后转到“工具”>“选项…”并勾选“需要变量声明”

第二:为什么不接受
变体而不是
字符串
,并使用
iError

Public Function ValidateRealization(值作为变量)作为变量
如果IsError(值)或CStr(值)=“0”或CStr(值)=“1”,则
ValidateRealization=“”
其他的
ValidateRealization=值
如果结束
端函数
{EDIT}如果在传递值之前已将其转换为字符串,则使用

Public Function ValidateRealization(值作为变量)作为变量
如果IsError(值),则
ValidateRealization=“”
其他的
选择案例CStr(值)
大小写为“#N/A”、“#VALUE!”、“#REF!”、“#DIV/0!”、“#NUM!”、“#NAME?”、“#NULL!”、“0”、“1”
ValidateRealization=“”
其他情况
ValidateRealization=值
结束选择
如果结束
端函数
两点:首先,您有未定义的
eValue
。转到模块顶部,添加行
选项Explicit
。然后转到“工具”>“选项…”并勾选“需要变量声明”

第二:为什么不接受
变体而不是
字符串
,并使用
iError

Public Function ValidateRealization(值作为变量)作为变量
如果IsError(值)或CStr(值)=“0”或CStr(值)=“1”,则
ValidateRealization=“”
其他的
ValidateRealization=值
如果结束
端函数
{EDIT}如果在传递值之前已将其转换为字符串,则使用

Public Function ValidateRealization(值作为变量)作为变量
如果IsError(值),则
ValidateRealization=“”
其他的
选择案例CStr(值)
大小写为“#N/A”、“#VALUE!”、“#REF!”、“#DIV/0!”、“#NUM!”、“#NAME?”、“#NULL!”、“0”、“1”
ValidateRealization=“”
其他情况
ValidateRealization=值
结束选择
如果结束
端函数


什么是
ervalue
?哎呀,我错了。所有的
过去都是
错误
什么是
?哎呀,我的错误。所有的
以前都是
错误
@dwirony No,将接受一个变体。@Chronocidal是的,对不起,但我的意思是,他以前好像是把
作为字符串引入的。他需要确保参数是一个范围或一个
#N/a
字符串不会返回True?啊-是的,OP是,但这就是Scott从参数定义中删除
作为字符串的原因。@Chronocidal oop好的,我现在知道了。。。我自己的测试搞砸了。这两个答案都很好。谢谢您的帮助。@D讽刺不,将接受一个变体。@Chronocidal是的,对不起,但我的观点是,他以前好像是以字符串的形式引入了
值。他需要确保参数是一个范围或一个
#N/a
字符串不会返回True?啊-是的,OP是,但这就是Scott从参数定义中删除
作为字符串的原因。@Chronocidal oop好的,我现在知道了。。。我自己的测试搞砸了。这两个答案都很好。谢谢你的帮助。我还没有把它转换成字符串。如果我愿意的话,那么我就失去了格式化选项(现在是一个百分比)。将错误转换为字符串似乎效果最好。不确定原因,但是
iError
没有在
IF
处捕获错误。为此,您获得了投票权。我刚刚检查并测试了所有错误,并且
IfError
范围.Value
中识别出了所有错误-您传递给函数的内容可能有问题?我没有将其转换为字符串。如果我愿意的话,那么我就失去了格式化选项(现在是一个百分比)。将错误转换为字符串似乎效果最好。不确定原因,但是
iError
没有在
IF
处捕获错误。为此,您获得了投票权。我刚刚检查并测试了所有错误,并且
IfError
Range.Value
中识别出了所有错误-您传递给函数的内容可能有问题?