【问题标题】:How to handle this Excel validation quirk?如何处理这个 Excel 验证怪癖?
【发布时间】:2017-10-11 05:31:34
【问题描述】:

我有这个代码。这是为了示例而设计的代码。

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 的验证功能。

【问题讨论】:

    标签: excel validation vba


    【解决方案1】:

    看起来你不能在Add之前设置IgnoreBlank,此时为时已晚。

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 2018-10-08
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多