Aqui está outra função definida pelo usuário que retornará todos os dígitos após uma determinada string (prefixo). Nos argumentos, você especifica a string a ser processada e o prefixo a ser usado. Você também pode especificar se o prefixo deve diferenciar maiúsculas de minúsculas. O padrão é que não seja sensível a maiúsculas e minúsculas, mas isso é facilmente alterado.
O UDF usa expressões regulares para processar o texto. Primeiro, removemos tudo até e incluindo o prefixo. Em seguida, removemos todos os não dígitos no restante.
===================================
Option Explicit
Function DigitsAfter(sInput, sPrefix, Optional MatchCase As Boolean = False) As String
Dim re As Object
Dim S As String
Dim sPatPrefix As String
Const sPat As String = "\D"
'Intialize Regex engine
Set re = CreateObject("vbscript.regexp")
With re
.Global = True
.ignorecase = Not MatchCase
End With
'Generate the digit prefix
re.Pattern = "(.)"
sPatPrefix = ".*" & re.Replace(sPrefix, "\")
'Remove characters up to and including the prefix
re.Pattern = sPatPrefix
If re.test(sInput) = False Then
'Exit if prefix not in string
DigitsAfter = "Digit Prefix not in String"
Exit Function
'now remove all the non-digits that are left
Else
S = re.Replace(sInput, "")
re.Pattern = sPat
DigitsAfter = re.Replace(S, "")
End If
End Function
=====================================
Aqui está uma pequena rotina mostrando como ele pode ser usado em uma macro maior:
======================================
Option Explicit
Sub TestDigitFunction()
Const S As String = "abc12x97J*24AAA123"
MsgBox S & vbLf & DigitsAfter(S, "J*")
End Sub
======================================