我正在尝试根据另一个单元格的内容为单元格设置列表验证,使用与我的数据输入表单上的单元格内容匹配的命名范围到Validation
表单上的范围(见this SO question)。命名范围的公式为:
=OFFSET(validation!$B$1,MATCH(INDIRECT(ADDRESS(CELL("row"),CELL("col")-2)),validation!$A:$A,0)-1,0,COUNTIF(validation!$A:$A,INDIRECT(ADDRESS(CELL("row"),CELL("col")-2))),1)
问题是如果ADDRESS(CELL("row"),CELL("col")-2)
引用的单元格为空,则使用Range.Validation.Add
使用VBA设置验证会出错:
Application-defined or object-defined error
然后它不会向单元格添加验证。我可以对Validation.Add
调用进行任何类型的错误处理,以确保验证设置完成吗?或者一种修改命名范围公式的方法,即使ADDRESS(CELL("row"),CELL("col")-2)
的内容未在validation
表单上返回匹配项,它也会输出一个值?
答案 0 :(得分:0)
作为解决方法试试这个:
ValList
命名范围以引用简单范围。 有点笨重,但似乎有效。
Sub SetVal()
Dim s As String
s = ActiveWorkbook.Names("ValList").RefersTo
ActiveWorkbook.Names("ValList").RefersTo = "=UserEntry!$A$3:$A$6"
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=ValList"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
ThisWorkbook.Names("ValList").RefersTo = s
End Sub