【问题标题】:Excel VBA List Validation - Peculiar Runtime ErrorExcel VBA 列表验证 - 特殊的运行时错误
【发布时间】:2014-05-20 12:42:11
【问题描述】:

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

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

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

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

  • 当我尝试更新时,工作表未受保护并且屏幕更新已关闭 设置此验证
  • 以上内容包含在 CommandButton_Click 中 所述工作表上的事件
  • 工作簿中的所有命令按钮都有 TakeFocusOnClick = 假
  • 这是 Microsoft Office 2013

【问题讨论】:

  • 您确定您有一个名为“常量”的工作表吗?确保该工作表名称中没有前导或尾随空格。当找不到该工作表时,通常会引发该错误。
  • 肯定的,就像我说的那样,包括“=Constants!Q6:Q30”在内的确切代码在工作簿的其他地方用于不同单元格的验证而没有错误。此外,它似乎是导致此错误的此表上任何类型的验证的 .Add 行(例如,我也使用 xlWholeNumber 得到它)。
  • 请发布您文件的(经过处理的)版本供我们查看。
  • 我能想到的唯一另一件事是你的范围不是完全合格的。如果您可以发布整个代码,它可能会有所帮助...例如,如果您在此代码上方选择了一张工作表,然后尝试运行您发布的内容,我不确定部分限定的范围引用 {with Range("Q3")} 会抛出一个循环。
  • 感谢您的建议,我在函数中对某些东西进行排序(主要是漫无目的:p),并且不再收到此错误。当我更有信心这是该问题的永久解决方案时,我将在稍后发布一些关于我所做更改的详细信息,以便其他人可以进行比较。

标签: list validation excel vba


【解决方案1】:

我意识到这是一个老问题,但它仍然很突出。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多