Вам нужно использовать \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)