2016-01-06 80 views
0

我想創建我自己的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 
+0

你打電話此函數來自工作表單元格,並且單元格中的返回值是#NAME?如果是這樣的話,你把代碼放在哪裏?它通常應在同一工作簿中的常規模塊中。您是否將該模塊命名爲與該功能相同的名稱?此外,您是否在工具/參考下設置了對正則表達式的引用? –

+0

是的,我從工作表單元格中調用它,並且單元格中的返回值是#NAME。 代碼位於工作簿中的模塊中。 模塊和函數具有相同的名稱。 我已經打開了對正則表達式的引用。 當我複製粘貼我提供的逐字逐句的鏈接的第2步中的代碼時,一切正常,但是當我這樣做時,它會導致#NAME錯誤,這意味着它是代碼問題,而不是命名模式,位置或引用。 – Haybuck

+0

你如何以及在哪裏放置VBA代碼? –

回答

0

看起來你已經命名模塊和功能相同。當發生這種情況時,Excel不知道你的意思,所以返回#NAME錯誤。有兩種修復方法:

  1. 更改一個或另一個的名稱。我會經常與mod前綴的所有常規模塊名稱,以避免這個問題:modextractGroupName

  2. 調用具有一個完全合格的名稱的功能:


=extractGroupName.extractGroupName(A1) 

0

在我看來你缺少對Reg表達庫的引用。 我認爲這是參考對話框中的Microsoft VBScript正則表達式(工具:在VBIDE中參考)...

+0

除了逐字逐句使用示例中的內容以外,它可以工作。我已經打開了參考。 – Haybuck

+0

如果缺少引用,它將在vbe中發出編譯錯誤,而不是單元中的#NAME錯誤。 –

+0

啊,所以如果你在立即窗口(又名調試窗口)中執行它的工作,對吧?確保函數在模塊中,而不在工作表類中。這也會造成這種情況。 – PaulG