数据validation列表错误
我试图添加一个数据validation下拉列表,我一直在debugging一段时间无济于事。 我得到一个运行时错误1004,应用程序定义或对象定义的错误。 在Formula1中设置Validation.Add
语句的一部分出现错误。
我已经尝试使用一个string引用到一个命名范围,一个string引用到一个标准的范围,并且,如下所示,从工作表上的列表生成一个逗号分隔的列表string,如下面的代码所示。 我用Debug.Print
检查了列表string,并得到了预期的结果。
Sub addPT_Validation() Dim sValidationList As String Dim cell As Range For Each cell In ThisWorkbook.Names("PT_Puldown").RefersToRange sValidationList = sValidationList & cell.Value & "," Next cell sValidationList = Left(sValidationList, Len(sValidationList) - 1) With ActiveSheet.Range("D14").Validation .Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Operator:=xlEqual, _ Formula1:=sValidationList .IgnoreBlank = True .InCellDropdown = True .ShowError = True End With End Sub
预先感谢任何指导。
你所有的代码都在工作(当然可以被优化),你所要做的只是删除validation,如果它已经存在。
如果您尝试将validation添加到已经包含一个的单元格,您将收到错误1004。
Sub addPT_Validation() Dim sValidationList As String Dim cell As Range For Each cell In ThisWorkbook.Names("PT_Puldown").RefersToRange sValidationList = sValidationList & cell.Value & "," Next cell sValidationList = Left(sValidationList, Len(sValidationList) - 1) With ActiveSheet.Range("D1").Validation '/Delete first., in case of any any existing validation .Delete .Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Operator:=xlEqual, _ Formula1:=sValidationList .IgnoreBlank = True .InCellDropdown = True .ShowError = True End With End Sub
我将使用命名的范围引用来构build公式,以便将Validation
对象的Add()
方法的Formula1
参数Add()
,如下所示
Sub addPT_Validation() Dim formula As String With ThisWorkbook.Names("PT_Puldown").RefersToRange formula = "'" & .Parent.Name & "'!" & .Address(External:=False) End With With ActiveSheet.Range("D14").Validation .Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Operator:=xlEqual, _ Formula1:=formula .IgnoreBlank = True .InCellDropdown = True .ShowError = True End With End Sub
正如@cyboashu所指出的,你的错误来自于你在添加一个新的validation之前没有删除validation。
关于您尝试直接将范围传递给Formula1的其他问题:
公式1应将该范围称为string。 例如:
Formula1:="=$G$2:$G$7"
或者,使用你的variables:
Formula1:="=" & ThisWorkbook.Names("PT_Puldown").RefersToRange.Address
或者更简单:
Formula1:="=" & Range("PT_Puldown").Address