使用公式间接参考的VBA数据验证

时间:2017-04-27 06:39:39

标签: excel vba list validation

我记录了以下代码但是如果我从vba运行它会给我一个错误(第2行)。您可以手动执行此操作,但它会向您发出警告,如果继续执行警告,则会采用数据验证中的公式。有人为什么没有通过vba工作吗?

     With .Range("F13").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=INDIRECT(E13)"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

E13最初为空,它是用户可选择的列表。

由于

1 个答案:

答案 0 :(得分:1)

如果E13为空,则Formula1:="=INDIRECT(E13)"会导致#REF!错误。这就是VBA中的运行时异常的原因。

错误也发生在GUI中,但GUI仅警告然后忽略错误。 VBA不会忽略错误。

因此我们需要避免此#REF!错误。为此,我们可以使用

Formula1:="=IF(E13="""",A100000,INDIRECT(E13))"

现在E13可以为空,也可以包含使用INDIRECT可解析的正确引用字符串(地址或名称)。如果E13为空。然后A100000将成为列表参考。所以A100000应该是一个在每种情况下都是空的单元格。