我有这个代码。为了这个例子,它是人为的代码。
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 :(得分:0)
看来你无法在IgnoreBlank
某事之前设置Add
,此时为时已晚。
除了您自己的解决方法(及其变体,例如将验证设置为始终为TRUE
的公式,翻转IgnoreBlank
并将公式更改为真实公式),您还可以处理验证公式本身中的空白单元格:
=IF(ISBLANK(A1), TRUE, VALUE(RIGHT(A1,6))>0)