【发布时间】:2020-12-16 15:07:02
【问题描述】:
我在名称管理器中定义了一些名称,例如 validation_list1 引用 =OFFSET(Sheet3!$C$4,,,COUNTIF(Sheet3!$C$4:$C$399,"? *"))
我想使用 vba 添加验证列表。下面的代码导致错误1004:
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=validation_list1"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = False
' Code with error
End With
但是当我从分配给 Formula1 的文本中删除等号 (=) 时,一切都会好起来的
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="validation_list1"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = False
'code without error!
End With
上述两个代码相似,但第一个具有 Formula1:="=validation_list1" 而第二个具有 Formula1:="validation_list1" 。为什么第一个会导致错误 1004?我必须添加 Formula1:="=validation_list1" ,如何?
我对定义 name manager 没有任何问题,问题是在引号之间添加等号(分配给 Formula1 的文本)。文本是什么并不重要,我用 Formula1:="=test" 对其进行了测试,并且也导致了错误,然后删除了 = 符号并写了 Formula1:="test"一切都很好。
编辑:谢谢克里斯尼尔森。这段代码是Record Macro的输出,如果我手动选择一个单元格并从Data选项卡中选择Data Validation并在@中输入文本=validation_list1 987654325@列表验证字段,一切都会好的,但是使用vba会导致错误
已解决 非常感谢@chrisneilsen,您的建议帮助我找到了原因。单独的每件事似乎都很好。公式、范围和命名范围都是正确的。此验证发生在程序对工作表和公式进行一些计算和更改之后,因此与验证间接相关的一个单元格更改为 #REF 。我使用 Define Name 作为该单元格的公式和 BINGO
【问题讨论】:
-
@farid 帮我帮你。你检查了我提到的事情吗?正如我所说,它对我有用。您的工作簿中一定还有其他事情没有告诉我们
-
@chrisneilsen 是的,我检查了所有这些。我不知道我的工作簿还可能存在什么
-
@farid 在单元格中输入
=validation_list1得到什么结果?