我记录了以下代码但是如果我从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最初为空,它是用户可选择的列表。
由于
答案 0 :(得分:1)
如果E13
为空,则Formula1:="=INDIRECT(E13)"
会导致#REF!
错误。这就是VBA
中的运行时异常的原因。
错误也发生在GUI
中,但GUI
仅警告然后忽略错误。 VBA
不会忽略错误。
因此我们需要避免此#REF!
错误。为此,我们可以使用
Formula1:="=IF(E13="""",A100000,INDIRECT(E13))"
现在E13
可以为空,也可以包含使用INDIRECT
可解析的正确引用字符串(地址或名称)。如果E13
为空。然后A100000
将成为列表参考。所以A100000
应该是一个在每种情况下都是空的单元格。