2014-04-08 42 views
2

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

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

我也尝试使用字符串“爱丽丝,鲍勃”的Formula1和我得到同样的错误,所以这不是问题。事实上,我只在这个特定的工作表上设置任何类型的验证(例如xlValidateWholeNumber出现同样的错误)时才看到这个错误。

一些信息,可能会或可能不相关:

  • 工作表不受保护和screenupdating是关闭的,当我尝试 集此验证
  • 以上包含上说CommandButton_Click 事件工作表
  • 工作簿中的所有CommandButton控件有 TakeFocusOnClick =假
  • 这是微软办公2013
+0

你确定你有一个工作表名为“常量”?确保在表格名称中没有前导或尾随空格。该错误通常在找不到该工作表时发生。 – sous2817

+0

肯定的,就像我说的那样,包含“= Constants!Q6:Q30”的确切代码在工作簿中的其他地方没有错误地用于其他单元的验证。此外,它似乎是任何形式的验证,在这张表导致此错误(例如,我也用xlWholeNumber它)的.Add行。 – user3509102

+0

请发布您的文件(santised)verion我们看看。 – brettdj

回答

0

我意识到这是一个古老的问题,但它仍然像突出一样。

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

因此,我的解决方法是选择需要用作参考的范围,并为其指定一个名称(至少在Excel 2010中:公式选项卡>名称管理器>定义名称>遵循提示[或仅限于在公式栏旁边的框中键入名称,在下面的图像中看到B2]],然后在我的代码中使用该命名范围。

Adding a named range

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

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