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 № 1Obtendrá 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