Excel VBA列表验证 - 特殊运行时错误

时间:2014-04-08 02:35:06

标签: excel list validation excel-vba vba

我只是尝试向单元格添加列表验证,我得到运行时错误1004应用程序定义或对象定义错误。我有这个确切的代码验证我的工作簿中的其他位置的单元格,它从来没有出现过问题。

With Range("Q3").Validation
        .Delete
        .Add _
        Type:=xlValidateList, _
        AlertStyle:=xlValidAlertStop, _
        Formula1:="=Constants!Q6:Q30"
End With

我也尝试过为Formula1使用字符串“Alice,Bob”,我得到了同样的错误,所以这不是问题。实际上,我只是在尝试设置此特定工作表上的任何类型的验证(例如xlValidateWholeNumber的相同错误)时才会看到此错误。

某些可能相关或不相关的信息:

  • 当我尝试时,工作表没有受到保护,并且关闭了screenupdating 设置此验证
  • 以上内容包含在CommandButton_Click中 上述工作表上的活动
  • 工作簿中的所有CommandButtons都有 TakeFocusOnClick = False
  • 这是Microsoft Office 2013

1 个答案:

答案 0 :(得分:0)

我意识到这是一个古老的问题,但它仍然表现得非常出色。

根据我的经验,您无法将数据验证设置为存储在另一个工作表中的范围。 除了一个例外:如果你" name"那范围。

我的解决方法就是选择我需要用作参考的范围,给它一个定义的名称(至少在Excel 2010中:公式选项卡>名称管理器>定义名称>按照提示输出[]或者只是在公式栏旁边的框中键入一个名称,你在下面的图片中看到B2],然后在我的代码中使用该命名范围。

Adding a named range

在您的情况下,假设您的命名范围是" NamedRange01",您的代码将是:

With Range("Q3").Validation .Delete .Add _ Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Formula1:="=NamedRange01" End With