【问题标题】:On error go to works in a module, but not in another出错时 go to 在一个模块中工作,但不在另一个模块中
【发布时间】:2019-06-09 19:15:06
【问题描述】:

我不明白为什么下面的代码可以在模块中工作...

On Error GoTo NO875

Workrange.Find("875 - COMPLEMENTO IT MANUAL").Select

On Error GoTo 0

'*****errorhandler****

NO875:

Workrange.Find("280 - MEJORA V. C. ABS.").Offset(0, 1).EntireColumn.Select
Selection.insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeft
Workrange.Find("280 - MEJORA V. C. ABS.").Offset(0, 1).Value = "875 - COMPLEMENTO IT MANUAL"

但是当我将相同的代码复制粘贴到另一个模块中时,会显示以下错误消息:

对象变量或未设置块变量

另外,在第一个模块中,我可以使用表达式xlFormatFromLeft,但在另一个模块中,我需要写xlFormatFromLeftOrAbove

知道为什么会这样吗?

提前致谢。

【问题讨论】:

  • 我敢打赌,Workrange 变量未在其他模块中定义。
  • 使用 Find() 时,最好将结果设置为 Range 变量,然后在尝试对它进行任何操作之前测试该变量不是 Nothing。这样你就可以在没有运行时错误的情况下管理“未找到”。你也不会使用Selection,通常最好避免使用它。

标签: excel vba error-handling


【解决方案1】:

Option Explicit 添加到每个模块的顶部。

这有几个好处,您将被告知未声明的变量,调试消息将更加量身定制,并且应该突出显示错误行。

在这种情况下,当您运行宏时,未声明变量的行将被突出显示。需要注意的是,变量是在不同的范围内声明的,Workrange 可能在一个模块的模块级别声明,但在另一个模块中没有声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2022-07-11
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多