【问题标题】:adding validation cause error 1004 in vba在 vba 中添加验证导致错误 1004
【发布时间】: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 得到什么结果?

标签: excel vba


【解决方案1】:

如您所知,您必须在 Formula1 分配中包含 =。如果不这样做,那么您分配的是文字字符串,而不是命名范围。

当您分配 Formula1 值时,会出现此错误:

  • 命名范围不存在(就像您尝试 Formula1:="=test" 时发生的那样),或者
  • 命名范围是工作表范围的,您尝试在不同工作表上的验证中使用它
  • 命名范围存在,但其“RefersTo”无效

我试过你的设置、命名范围和代码。它对我有用,使用 Excel 365

Sub test()
    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
    End With
End Sub

名称定义

验证列表数据

选择B4:B5运行代码后

证明命名范围有效

检查事项

  • 检查 validation_list1 是否属于工作簿范围
  • Sheet3!C4:C399 中的数据有效(无错误、无间隙)
  • 命名范围名称或公式中没有拼写错误
  • 在单元格中键入=validation_list1。你看到了什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多