我正在尝试添加数据验证下拉列表,我已经调试了一段时间但无济于事。我收到运行时错误1004,应用程序定义或对象定义错误。在Validation.Add
语句的Formula1设置部分中发生错误。
我尝试使用对命名范围的字符串引用,对标准范围的字符串引用,以及如下所示,从工作表上的列表生成的逗号分隔列表字符串,如下面的代码所示。我已使用Debug.Print
检查了列表字符串并获得了预期的结果。
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
提前感谢任何指导。
答案 0 :(得分:4)
您的所有代码都在运行(当然可以进行优化),您需要做的就是删除已经存在的验证。
如果您尝试将验证添加到已包含一个的单元格,则会收到错误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
答案 1 :(得分:2)
我使用命名范围引用来构建公式以放入Formula1
对象Validation
方法的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
答案 2 :(得分:1)
正如@cyboashu所指出的那样,您的错误来自于您在添加新验证之前未删除验证的事实。
关于你试图直接将范围传递给Formula1的其他问题:
Formula1应该将范围称为字符串。 例如:
Formula1:="=$G$2:$G$7"
或者,使用您的变量:
Formula1:="=" & ThisWorkbook.Names("PT_Puldown").RefersToRange.Address
或更简单:
Formula1:="=" & Range("PT_Puldown").Address