使用VBA数据验证
通常情况下,可以通过VBA在Excel中应用数据验证,但我有一个具体的问题使用VBA数据验证
我用间接方法应用验证,通常是当我不使用VBA我得到一个警告通过excel,“源目前评估为错误,你想继续吗?” (这是因为它间接指细胞可能是空的),现在我可以很容易地通过点击“是”
这里的链接http://www.contextures.com/xldataval02.html(相关验证列表)
跳过在Excel此错误但是,当我尝试使用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是指输入该特定行中
深度和值是正常的字符串
cablecode可以有两个值=“is”或“ IEC”
Q11可以是 “XLPE” 或 “PVC”
Z11可以是 “人” 或 “铜”
因为cablecode为整个项目IVE直接提交给它的恒定, Q11和Z11可以为不同的行不同的,所以香港专业教育学院称他们seperately
整串出来是 “is_depth_al_xlpe_values” 同样不同permuations,所有命名范围已经被定义
我想下面的行需要修正,从
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:= _
"=INDIRECT(cablecode&""_depth_""&$Q11&""_""&$Z11&""_values"")"
到
dim cellToBeReferred as string
cellToBeReferred = cablecode & "_depth_" & Range("$Q11").Value & "_" _
& Range("$Q11").Value & "_values"
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:= _
"=INDIRECT(" & cellToBeReferred & ")"
以串了会帮你调试的问题,图什么是命名的范围值,你会想参考。查看cellToBeReferred
结果到什么值并使用上面的方法更正了连接。阅读有机磷农药后
编辑点评
在这种情况下,环绕INDIRECT
与ISERROR
,给虚拟单元格引用。 例如
"=IFERROR(INDIRECT(" & cellToBeReferred & "), Z1)"
其中如果INDIRECT
失败,则Z1是要引用的单元格。
我知道错误是什么..只是当Q11和Z11没有指定字符串将变成is_depth_(这里没有)_(这里没有)_values ...因为它不是命名范围它给出了一个错误..问题是excel会让我继续,因为后来我可以输入Q11和Z11和验证将可用..但vba不会让我继续... –
但在虚拟单元格引用的情况下原始验证不会在那里......如果用户在Z11和Q11中输入数据,他将不会得到他应该输入的列表 –
如果命名的范围是正确的并且有数据,它将被引用。如果有错误,Z1(它是一个临时参考e)将被提及。 – shahkalpesh
如果您可以发布源代码,这将更加清晰。 –
@EdwinBautista ive添加源代码 –
什么是错误和错误是什么行? – shahkalpesh