我的代码如下
If Cells(Target.Row, 2) = "" And (Cells(Target.Row, 3) = "" Or Cells(Target.Row, 3) = "") Then
Sheets("MySheet").Activate
Cells(Target.Row, 3).Activate
ActiveCell.Validation.Delete
If (Cells(Target.Row, 2) = "Type A") Then
ActiveCell.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=AvailableVersions"
ElseIf (Cells(Target.Row, 2) = "Type B") Then
ActiveCell.Validation.Delete
Else
ActiveCell.Validation.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertInformation, Formula1:="0", Formula2:="9999999"
End If
End If
每当我到达ActiveCell.Validation.Add
时,我遇到的问题就出现了Run Time Error '1004': Application-defined or object-defined error
这不是一个非常有用的错误,并且这种情况同时发生在数字和列表验证类型中,所以我确信它不是列表本身的问题,无论如何都有工作簿级别范围。它永远不会出现在我觉得奇怪的ActiveCell.Validation.Delete上吗?
我一直在谷歌试图找到一个解决方案,并且大多数人认为它是由一个按钮运行动态验证代码引起的,尽管有Activate调用,但是我正在使用工作表更改事件而不是按钮上运行按,所以我不认为这是我的问题 - 任何想法?我基本上浪费了一整天的时间! :(
答案 0 :(得分:2)
如果您没有从工作表事件中运行代码,那么您的代码就可以了。对我来说,当您尝试从事件过程中选择新单元格时会出现问题。我重写了你的代码在没有选择不同单元格的情况下尝试做的事情。
试试这个:
If Cells(Target.Row, 2) = "" And (Cells(Target.Row, 3) = "" Or Cells(Target.Row, 3) = "") Then
With Sheets("MySheet")
.Cells(Target.Row, 3).Validation.Delete
If (.Cells(Target.Row, 2) = "Type A") Then
.Cells(Target.Row, 3).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=AvailableVersions"
ElseIf (.Cells(Target.Row, 2) = "Type B") Then
.Cells(Target.Row, 3).Validation.Delete
Else
.Cells(Target.Row, 3).Validation.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertInformation, Formula1:="0", Formula2:="9999999"
End If
End With
End If
如果AvailableVersions
不是列表的有效定义名称,则可能出现另一个错误。