【问题标题】:Error when running VBA macro on different computers在不同的计算机上运行 VBA 宏时出错
【发布时间】:2016-11-17 20:08:06
【问题描述】:

我在 VBA 中编写了一个宏,它非常适合我的文件。问题是当我在另一台计算机上运行这个宏(同一个文件)时,我收到以下错误:

无效的过程调用或参数(错误 5)

...在以下代码中执行.Item(0).Value时:

With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "([a-zA-Zá-ùÁ-Ù])(\d+)"
    With .Execute(strText)
        strRes = .Item(0).Value

我怀疑某些东西可能依赖于特定的工作簿或文件路径(尽管我找不到依赖项),但我无法解决这种奇怪的行为。

【问题讨论】:

  • 每台机器上有哪些应用程序(Word、Excel、...)以及哪些版本?
  • 基于error description 出现上述错误最常见的原因是:索引超出范围...
  • “同一个文件”-strRes 炸毁时的值是多少?

标签: regex vba excel properties runtime-error


【解决方案1】:

这实际上意味着字符串 strText 与正则表达式不匹配。正如docs中提到的:

Execute 如果未找到匹配项,则返回一个空的匹配集合。

所以这意味着.Item(0) 不存在并且是一个无效的引用:

strRes = .Item(0).Value

要解决这个问题,请使用Count 属性测试集合中至少有一个元素:

With .Execute(strText)
    strRes = "" ' Default value
    If .Count > 0 Then strRes = .Item(0).Value

根据您的代码对 strRes 所做的操作,您可能希望在 Count 为 0 时采取不同的操作。上面的代码尝试继续使用空字符串,但是也许你想退出一个函数,或者向用户显示一条消息,或者还有别的什么......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多