0

通常可以通过 vba 在 excel 中应用数据验证,但我遇到了一个特定问题

我正在使用间接方法来应用验证,通常当我不使用 vba 时,我会收到 excel 的警告“源当前评估为错误,你想继续吗?” (这是因为间接引用的单元格可能为空),现在我可以通过单击“是”轻松跳过 Excel 中的此错误

这是链接http://www.contextures.com/xldataval02.html(相关验证列表)

但是当我尝试使用 vba 执行相同的操作时,我遇到了运行时错误,没有友好的提示可以让我继续。我该如何处理这种错误。

错误恢复不起作用,因为那时 vba 根本不应用验证。

这是代码

Set rng = ThisWorkbook.Sheets("input").Range("AB11:AB65536")
With rng.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:= _
    "=INDIRECT(cablecode&""_depth_""&$Q11&""_""&$Z11&""_values"")"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

cablecode 是一个静态命名范围

Q11 和 Z11 指的是该特定行中的输入

depthvalues是普通字符串

cablecode 可以有两个值 = "is" 或 "iec"

Q11 可以是“xlpe”或“pvc”

Z11 可以是“al”或“c​​u”

由于我直接引用它的整个项目的电缆代码是恒定的,所以 Q11 和 Z11 对于不同的行可能是不同的,所以我单独引用它们

整个字符串是“is_depth_al_xlpe_values”类似不同的排列,并且所有命名范围都已经定义

4

2 回答 2

1

I suppose the following line needs correction from

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:= _
    "=INDIRECT(cablecode&""_depth_""&$Q11&""_""&$Z11&""_values"")"

to

dim cellToBeReferred as string
cellToBeReferred = cablecode & "_depth_" & Range("$Q11").Value & "_" _
& Range("$Q11").Value & "_values"

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:= _
    "=INDIRECT(" & cellToBeReferred  & ")"

Taking the string out will help you debug the issue and figure what is the value of named range, you'd want to refer to. See what value cellToBeReferred results into and correct the concatenation using above.

EDIT after reading OPs comment

In that case, surround the INDIRECT with ISERROR and give a dummy cell reference. For e.g.

"=IFERROR(INDIRECT(" & cellToBeReferred  & "), Z1)"

Where Z1 is a cell to be referred if INDIRECT fails.

于 2012-05-09T05:48:48.620 回答
0

无法抑制 VBA 中的警告。暂时为参考单元格赋值,稍后将其清除。这将防止 UI 在选择“是”到“源当前评估为错误。您要继续”对话框时避免的运行时错误。

前任。

thisworkbook.range("Q11").value = "1"

'data validation - i.e. Formula1:="=INDIRECT(Q11)"

thisworkbook.range("Q11").value = ""
于 2020-11-12T20:45:30.527 回答