2016-01-06 5 views
0

Я пытаюсь создать свою собственную функцию VBA, основанную на той, которая находится на втором шаге по этой ссылке. How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loopsRegEx Extraction #NAME error

Однако, я получаю ошибку #NAME. Где я здесь не так? Я проверил свой RegEx на https://regex101.com.

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 
+0

Вы звоните эта функция из ячейки листа, а возврат в ячейке #NAME? Если это так, где вы положили код? Обычно он должен быть в регулярном модуле в той же книге. Вы назвали модуль с тем же именем, что и функция? Кроме того, вы установили ссылку на регулярные выражения в инструментах/ссылках? –

+0

Да, я вызываю это из ячейки листа, а возврат в ячейке #NAME. Код находится в модуле в книге. Модуль и функция имеют одно и то же имя. Я включил ссылку на регулярные выражения. Все работает нормально, когда я копирую код в шаге 2 ссылки, которую я предоставлял дословно, однако, когда я это делаю, он вызывает ошибку #NAME, подразумевая, что это проблема с кодом, а не именование схемы, местоположения или ссылок , – Haybuck

+0

Как и где вы поместили код VBA? –

ответ

0

Кажется, вы назвали модуль и функцию одинаковыми. Когда это произойдет, Excel не знает, что вы имеете в виду, поэтому возвращает ошибку #NAME. Имеются две ошибки:

  1. Измените название того или иного. Я часто префикс все обычные имена модулей с mod таким образом, чтобы избежать этой проблемы: modextractGroupName

  2. Вызов функции с полным именем:


=extractGroupName.extractGroupName(A1) 

0

Полагает, что вам не хватает ссылки на библиотеку Reg Expression. Я думаю, что это регулярные выражения Microsoft VBScript в диалоговом окне «Ссылки» (Инструменты: Referneces в VBIDE) ...

+0

За исключением случаев, когда я использую один из примера дословно, он работает. Я уже включил ссылку. – Haybuck

+0

Если отсутствовала ссылка, это дало бы ошибку компиляции в vbe, а не #NAME-ошибку в ячейке. –

+0

А, так что если вы выполните в окне Immediate (a.k.a. окно отладки), это работает, правильно? Убедитесь, что функция находится в модуле, а не в классе рабочей таблицы. Это также вызовет это. – PaulG