Excel 尝试使用VBA设置依赖列表验证,获取;应用程序定义或对象定义错误“;
我正在尝试基于另一个单元格的内容设置单元格的列表验证,使用一个命名范围,该范围将我的数据输入表上的单元格内容与Excel 尝试使用VBA设置依赖列表验证,获取;应用程序定义或对象定义错误“;,excel,validation,vba,Excel,Validation,Vba,我正在尝试基于另一个单元格的内容设置单元格的列表验证,使用一个命名范围,该范围将我的数据输入表上的单元格内容与验证表上的范围相匹配(请参阅)。命名范围的公式为: =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)))
验证表上的范围相匹配(请参阅)。命名范围的公式为:
=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)
问题是,如果地址(单元格(“行”)和单元格(“列”)-2)
所引用的单元格为空,则使用范围.validation.Add设置VBA验证会出现错误:
Application-defined or object-defined error
然后它不会将验证添加到单元格中。是否可以对验证执行任何类型的错误处理。添加调用以确保设置验证?或者修改命名范围公式的方法,以便即使地址(单元格(“行”)、单元格(“列”)-2)
的内容在验证
工作表上没有返回匹配项,它也会输出一个值。作为一种解决方法,请尝试以下操作:
修改ValList
命名范围以引用简单范围李>
设置验证李>
将“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
作为解决方法,请尝试以下方法:
修改ValList
命名范围以引用简单范围李>
设置验证李>
将“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
这似乎确实有效。谢谢你在这个问题上的帮助!这似乎确实有效。谢谢你在这个问题上的帮助!