/ / No puedo encontrar por qué mi comando VBA simple regex no funciona - regex, excel, vba, excel-vba

No puedo encontrar por qué mi comando de expresión regular de VBA no funciona - regex, excel, vba, excel-vba

Al usar esta línea en Excel VBA:

Cells(a, 20).Value = regexProjet.Execute(Cells(a, 1).Value)(0)

Aparece una advertencia que dice que el parámetro o el comando no son válidos.

He usado esta línea en muchos lugares en mi código y funcionó bien, el formato de las celdas es todo estándar (son "cadenas ...").

¿Alguien podría darme algunos indicios de qué buscar?

Para tu información, así es como declaré la expresión regular:

Dim regexProjet As Object
Set regexProjet = CreateObject("VBScript.RegExp")
regexProjet.IgnoreCase = True
regexProjet.Pattern = "^   ([a-z]+)(-)([0-9]+)" "conserve seulement la clé du projet

Respuestas

2 para la respuesta № 1

Obtendrá esa respuesta si su expresión regular no coincide con sus datos. Para evitarlo, utilizando la técnica que está utilizando, primero haga una prueba para ver si su expresión regular coincide con su cadena.

p.ej:

If regexProjet.test(Cells(a,1).value) then
Cells(a, 20).Value = regexProjet.Execute(Cells(a, 1).Value)(0)
Else
... your error routine
End If

Además, debe tener en cuenta que si solo está tratando de igualar el patrón general, no es necesario que los grupos de captura (y agregarán tiempo de ejecución, haciendo que la expresión regular sea menos eficiente).


0 para la respuesta № 2

Aquí está el código de muestra que tengo que ejecutar en Excel 2013 pero es ligeramente diferente de lo que tienes. Obtuve el código de [Cómo hacer expresiones regulares]: http://support.microsoft.com/kb/818802

Sub testreg()

Dim regexProjet As New RegExp
Dim objMatch As Match
Dim colMatches   As MatchCollection
Dim RetStr As String

RetStr = ""

regexProjet.IgnoreCase = True
regexProjet.Pattern = "^   ([a-z]+)(-)([0-9]+)"


Set colMatches = regexProjet.Execute(Cells(1, 1).Value)

For Each objMatch In colMatches   " Iterate Matches collection.
RetStr = RetStr & " " & objMatch.Value
Next

Cells(1, 20).Value = RetStr

End Sub