Excel VBA列表validation – 特殊的运行时错误

我只是试图添加一个单元格的列表validation,我得到运行时错误1004应用程序定义或对象定义的错误。 我有这个确切的代码validation我的工作簿中的其他地方的单元格,它从来没有问题。

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

我也尝试使用string“Alice,鲍勃”为Formula1和我得到相同的错误,所以这不是问题。 事实上,我只在这个特定的工作表上设置任何types的validation(例如,与xlValidateWholeNumber相同的错误)才看到这个错误。

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

  • 当我尝试设置此validation时,工作表不受保护,屏幕更新closures
  • 上述内容包含在上述工作表上的CommandButton_Click事件中
  • 工作簿中的所有CommandButton都有TakeFocusOnClick = False
  • 这是Microsoft Office 2013

我意识到这是一个古老的问题,但它仍然是如此杰出。

根据我的经验,您不能将数据validation设置为存储在另一个工作表中的范围。 有一个例外:如果你“命名”该范围。

我的解决方法就是select我需要用作参考的范围,为其指定一个名称(至less在Excel 2010中:公式选项卡>名称pipe理器>定义名称>按照提示进行操作[或者只是在公式栏旁边的框,在下面我的图像中看到B2)],然后在我的代码中使用该命名范围。

添加一个命名的范围

在你的情况下,假设你的命名范围是“NamedRange01”,你的代码将是:

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