如何处理这个Excel验证怪癖?

如何处理这个Excel验证怪癖?,excel,validation,vba,Excel,Validation,Vba,我有这个密码。这是为了示例而编写的代码 Sub x() ActiveSheet.Range("A1").Validation.Delete ActiveSheet.Range("A1").Validation.Add Type:=xlValidateCustom, Formula1:="=VALUE(RIGHT(A1,6))>0" End Sub 如果代码执行时A1为空,则会出现错误1004,即应用程序定义的错误或对象定义的错误。我相信这是因为公式产生了#值而不是Fals

我有这个密码。这是为了示例而编写的代码

Sub x()
    ActiveSheet.Range("A1").Validation.Delete
    ActiveSheet.Range("A1").Validation.Add Type:=xlValidateCustom, Formula1:="=VALUE(RIGHT(A1,6))>0"
End Sub
如果代码执行时A1为空,则会出现错误1004,即应用程序定义的错误或对象定义的错误。我相信这是因为公式产生了
#值而不是
False
。如果我尝试手动设置验证,我会收到一条警告,指出结果是错误的,但是如果我单击“确定”,验证就会正常工作

我想这是因为我没有免除空白单元格的验证,所以我添加了一行:

Sub x()
    ActiveSheet.Range("A1").Validation.Delete
    ActiveSheet.Range("A1").Validation.IgnoreBlank = True
    ActiveSheet.Range("A1").Validation.Add Type:=xlValidateCustom, Formula1:="=VALUE(RIGHT(A1,6))>0"
End Sub
但这只是将错误向上移动了一行。现在我在
IgnoreBlank=True
行中得到了1004错误

我想我可以暂时在单元格中输入一个值,设置验证,然后删除单元格的内容,但我希望有不同的方法


我做错什么了吗?我最初计划在最后以编程方式进行验证,而不是使用Excel的验证功能。

在添加
内容之前,似乎无法设置
IgnoreBlank
,此时为时已晚

除了您自己的解决方案(及其变体,例如,将验证设置为始终为
TRUE
、翻转
IgnoreBlank
并将公式更改为真实公式)之外,您还可以处理验证公式本身中的空白单元格:

=IF(ISBLANK(A1), TRUE, VALUE(RIGHT(A1,6))>0)