【问题标题】:RegEx Extraction #NAME error正则表达式提取 #NAME 错误
【发布时间】:2016-04-10 17:12:50
【问题描述】:

我正在尝试基于此链接的第二步中的一个创建自己的 VBA 函数。 How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops

但是,我收到 #NAME 错误。我在哪里错了?我已经在 https://regex101.com 上测试了我的 RegEx。

Function extractGroupName(Myrange As Range) As String
    Dim regEx As New RegExp
    Dim strPattern As String
    Dim strInput As String
    Dim strReplace As String
    Dim strOutput As String

    strPattern = "^.*Name:(.*);Id"

    If strPattern <> "" Then
        strInput = Myrange.Value
        strReplace = "$1"

        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
        End With

        If regEx.Test(strInput) Then
            extractGroupName = regEx.Replace(strInput, "$1")
        Else
            extractGroupName = "ERROR: NOT FOUND"
        End If
    End If
End Function

【问题讨论】:

  • 你是从工作表单元格调用这个函数,而单元格中的返回是#NAME?如果是这样的话,你把代码放在哪里了?它通常应位于同一工作簿的常规模块中。您是否将模块命名为与函数相同的名称?另外,您是否在工具/参考下设置了对正则表达式的引用?
  • 是的,我从工作表单元格中调用它,单元格中的返回是#NAME。该代码位于工作簿的一个模块中。模块和函数确实具有相同的名称。我已经打开了对正则表达式的引用。当我逐字复制粘贴链接的第 2 步中的代码时,一切正常,但是当我这样做时,它会导致 #NAME 错误,这意味着这是代码问题,而不是命名架构、位置或引用。
  • 你是如何以及在哪里放置 VBA 代码的?
  • 抱歉,刚刚编辑了我原来的回复。不小心按早进入。
  • 如果你的模块和函数同名,Excel不知道你指的是哪个。所以他们需要有不同的名字,或者你需要使用一个完全限定的名字。

标签: regex vba excel


【解决方案1】:

您似乎已将模块和函数命名为相同的名称。发生这种情况时,Excel 不知道您的意思,因此返回 #NAME 错误。有两个修复:

  1. 更改其中一个的名称。我会经常在所有常规模块名称前加上mod 以避免这个问题:modextractGroupName

  2. 使用完全限定名称调用函数:


=extractGroupName.extractGroupName(A1)

【讨论】:

    【解决方案2】:

    在我看来,您缺少对 Reg 表达式库的引用。 我认为这是“引用”对话框中的 Microsoft VBScript 正则表达式(工具:VBIDE 中的引用)...

    【讨论】:

    • 除非我逐字使用示例中的那个,它可以工作。我已经打开了参考。
    • 如果缺少引用,它会在 vbe 中给出编译错误,而不是在单元格中出现 #NAME 错误。
    • 啊,所以如果你在即时窗口(也就是调试窗口)中执行,它就可以工作,对吧?确保函数在模块中,而不是在工作表类中。这也会导致。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2021-12-05
    • 2016-09-09
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多