División de cadenas en VBA usando RegEx
excel string-split (2)
Soy nuevo en VBA y me gustaría buscar ayuda con respecto al uso de RegEx y espero que de alguna manera pueda aclararme sobre lo que estoy haciendo mal. Actualmente estoy tratando de dividir una fecha en su fecha individual, mes y año, y los posibles delimitadores incluyen ",", "-" y "/".
Function formattedDate(inputDate As String) As String
Dim dateString As String
Dim dateStringArray() As String
Dim day As Integer
Dim month As String
Dim year As Integer
Dim assembledDate As String
Dim monthNum As Integer
Dim tempArray() As String
Dim pattern As String()
Dim RegEx As Object
dateString = inputDate
Set RegEx = CreateObject("VBScript.RegExp")
pattern = "(/)|(,)|(-)"
dateStringArray() = RegEx.Split(dateString, pattern)
'' .... code continues
Esto es lo que estoy haciendo actualmente. Sin embargo, parece haber algo mal durante la función RegEx.Split, ya que parece hacer que mis códigos se bloqueen y no se procesen más.
Para confirmar, hice algo simple:
MsgBox("Hi")
pattern = "(/)|(,)|(-)"
dateStringArray() = RegEx.Split(dateString, pattern)
MsgBox("Bye")
El msgbox "Hola" aparece, pero el msgbox "Bye" nunca sale, y los códigos más abajo no parecen ser eliminados en absoluto, lo que llevó a sospechar que RegEx.Split está causando que se atasque.
¿Puedo verificar si realmente estoy usando RegEx.Split de la manera correcta? Según MSDN here , Split (String, String) también devuelve una matriz de cadenas.
¡Gracias!
Editar : Estoy tratando de no explorar la función CDate () ya que estoy tratando de no depender de la configuración regional de la computadora del usuario.
Citando un ejemplo de la documentación de VbScript Regexp: https://msdn.microsoft.com/en-us/library/y27d2s18%28v=vs.84%29.aspx
Function SubMatchTest(inpStr)
Dim retStr
Dim oRe, oMatch, oMatches
Set oRe = New RegExp
'' Look for an e-mail address (not a perfect RegExp)
oRe.Pattern = "(/w+)@(/w+)/.(/w+)"
'' Get the Matches collection
Set oMatches = oRe.Execute(inpStr)
'' Get the first item in the Matches collection
Set oMatch = oMatches(0)
'' Create the results string.
'' The Match object is the entire match - [email protected]
retStr = "Email address is: " & oMatch & vbNewLine
'' Get the sub-matched parts of the address.
retStr = retStr & "Email alias is: " & oMatch.SubMatches(0) '' dragon
retStr = retStr & vbNewLine
retStr = retStr & "Organization is: " & oMatch.SubMatches(1) '' xyzzy
SubMatchTest = retStr
End Function
Para probar, llame al:
MsgBox(SubMatchTest("Please send mail to [email protected]. Thanks!"))
En resumen, necesita que su Patrón coincida con las diversas partes que desea extraer, con los separadores intermedios, tal vez algo como:
"(/d+)[/-,](/d+)[/-,](/d+)"
Todo estará en oMatch, mientras que los números (/ d) terminarán en oMatch.SubMatches (0) a oMatch.SubMatches (2).
Para dividir una cadena con una expresión regular en VBA:
Public Function SplitRe(Text As String, Pattern As String, Optional IgnoreCase As Boolean) As String()
Static re As Object
If re Is Nothing Then
Set re = CreateObject("VBScript.RegExp")
re.Global = True
re.MultiLine = True
End If
re.IgnoreCase = IgnoreCase
re.Pattern = Pattern
SplitRe = Strings.Split(re.Replace(text, ChrW(-1)), ChrW(-1))
End Function
Ejemplo de uso:
Dim v
v = SplitRe("a,b/c;d", "[,;/]")