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