2017-10-10 18 views
2

我有这段代码。这是为了这个例子而编写的代码。如何处理这个Excel验证的怪癖?

Sub x() 
    ActiveSheet.Range("A1").Validation.Delete 
    ActiveSheet.Range("A1").Validation.Add Type:=xlValidateCustom, Formula1:="=VALUE(RIGHT(A1,6))>0" 
End Sub 

如果A1是空白的代码执行时,会出现错误1004,应用程序定义或对象定义的错误。我相信这是因为公式导致#VALUE!而不是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的验证功能。

回答

0

看来你不能在你Add之前设置IgnoreBlank,在这一点上已经太晚了。

除了你自己的解决方法的想法(及其变化,例如,设置验证,以一个公式,就是始终TRUE,翻转IgnoreBlank并改变其化学式真实的),你也可以处理的空白单元格的验证公式本身:

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