【问题标题】:Named Range = strVariable resulting in "1004: Application-defined or object-defined error"命名范围 = strVariable 导致“1004:应用程序定义或对象定义错误”
【发布时间】:2015-05-01 09:11:31
【问题描述】:

太奇怪了,我的 VBA 程序中有类似的语句,但这个语句给了我一个问题。我已验证命名范围已准确列出。

Dim strWarning As String
strWarning = Sheet3.Range("Dte_MissingFlag") 'Initiates to "N"

... some decision logic to flip the strWarning Flag to "Y" or "N"...

If Range("Dte_MissingFlag") <> strWarning Then 
    Range("Dte_MissingFlag") = strWarning
end if

If 子句内部发生错误。

1004: Application-defined or object-defined error

迄今为止完成的调试: 1) 运行时,在即时窗口中测试

?strWarning
>returns "x"

?Range("Dte_MissingFlag") 
>returns null/empty

2) 在即时窗口中运行语句 Range("Dte_MissingFlag") = "x" 没有问题。

我已经阅读了一些内容,其中大部分错误是由于对范围或单元格的无效引用。我试过使用 Sheet("name").Range("cell").value,但仍然得到同样的错误。

对这个有什么想法吗? 提前致谢。

【问题讨论】:

  • 如果在代码开头为命名单元格设置 Range 变量会怎样?您是否可能在省略部分的工作簿之间切换?
  • 也许可以尝试代码但跳过... some decision logic... 位以查看它是否仍然失败。
  • 您是否在模块代码页的声明部分(顶部)中使用Option Explicit?公式 ► 名称管理器是否将 Dte_MissingFlag 报告为工作簿或工作表范围?您最初使用的是 Sheet3 代号,但后来在代码中省略了它。

标签: vba excel


【解决方案1】:

我相信您的命名范围 Dte_MissingFlag 是一个不在 Sheet3 中的工作表范围,请检查一下。

我会改用 ThisWorkbook.Names("Dte_MissingFlag")

当您使用Range("SomeName") 时,它通常指的是活动工作簿。如果名称是工作表范围的,您需要使用工作表名称或 ThisWorkbook.Names()

【讨论】:

  • 谢谢帕特里克。当我在名称管理器中检查命名范围时,它们都是工作簿范围。但是,当我添加 Sheet#.Range("dte_missingflag") 它工作得很好。再次感谢!
猜你喜欢
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2013-05-04
相关资源
最近更新 更多