VBA regex - значение, используемое в формуле, имеет неверный тип данных - PullRequest
0 голосов
/ 25 февраля 2019

Я не могу понять, почему эта функция, которая включает регулярное выражение, продолжает возвращать ошибку неправильного типа данных?Я пытаюсь вернуть соответствие указанному шаблону из строки пути к файлу в документе Excel.Примером шаблона, который я ищу, является "02 Package_2018-1011" из образца строки "H: \ H1801100 MLK Middle School Hartford \ 2-Archive! Выпущенные пакеты предложений \ 01 Package_2018-0905 Предложение на снос и снижение ставок Set_Drawings - PDF\ 00 HazMat \ HM-1.pdf ".Копия кода VBA приведена ниже.

Function textpart(Myrange As Range) As Variant
Dim strInput As String
Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")

strInput = Myrange.Value

With regex
    .Pattern = "\D{2}\sPackage_\d{4}-\d{4}"
    .Global = True
End With

Set textpart = regex.Execute(strInput)

Функция завершения

1 Ответ

0 голосов
/ 25 февраля 2019

Вам нужно использовать \d{2} для соответствия 2-значному чанку, а не \D{2}.Кроме того, вы пытаетесь присвоить целую коллекцию совпадений результату функции, в то время как вы должны извлечь первое значение совпадения и присвоить это значение результату функции:

Function textpart(Myrange As Range) As Variant
    Dim strInput As String
    Dim regex As Object
    Dim matches As Object
    Set regex = CreateObject("VBScript.RegExp")


    strInput = Myrange.Value

    With regex
        .Pattern = "\d{2}\sPackage_\d{4}-\d{4}"
    End With

    Set matches = regex.Execute(strInput)
    If matches.Count > 0 Then
      textpart = matches(0).Value
    End If

End Function

Обратите внимание, чтобы сопоставить его в целомслово вы можете добавить границы слов:

.Pattern = "\b\d{2}\sPackage_\d{4}-\d{4}\b"
            ^^                          ^^ 

Чтобы соответствовать ему только после \, вы можете использовать группу захвата:

.Pattern = "\\(\d{2}\sPackage_\d{4}-\d{4})\b"
' ...
' and then
' ...
textpart = matches(0).Submatches(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...