自定义错误处理vba
我有一个单元格,它是一个嵌套的if和if错误。我不想在公式中粘贴我的vlookup 5次。相反,我希望用宏检查错误。特殊情况是0或1 我写这个函数是为了得到vlookup的值自定义错误处理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
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
中识别出了所有错误-您传递给函数的内容可能有问题?