vba - uso - ¿Cómo dividir un campo de nombre que tiene datos incorrectos?
recordset vba excel (2)
Tengo una tabla con un campo llamado PATRN_NAME que está configurado con First_Name, Last_Name MI
Ejemplos:
Smith, James M
Jones, Chris J.
Estoy tratando de dividir el campo en FIRST_NAME, LAST_NAME y campos MI. Acabo de hacer una pregunta al respecto y alguien me ayudó a usar Split () para obtener el campo LAST_NAME. Sin embargo, cuando trato de utilizar la función Split () para FIRST_NAME, no funciona porque el campo tiene registros que no siguen el convenio del nombre del campo y en su lugar son los siguientes: "Biblioteca de la ciudad - GW" o "Donación de Nueva York".
Cuando mi código encuentra este tipo de nombres arroja el error "Subíndice fuera de rango" en la línea donde estoy usando primero! FIRST_NAME = Dividir (Trim (Split (primera! PATRN_NAME, ",") (1)), "" ) (0). ¿Cómo puedo hacer que mi código se ejecute solo en los datos que siguen la convención de nombre estándar para la mayor parte del campo?
Function Change_Name()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Active Patrons", dbOpenDynaset)
rst.MoveFirst
Do While Not rst.EOF
rst.Edit
rst!LAST_NAME = Split(rst!PATRN_NAME, ",")(0)
rst!FIRST_NAME = Split(Trim(Split(rst!PATRN_NAME, ",")(1)), " ")(0)
rst.Update
rst.MoveNext
Loop
End Function
SI no hay coma en el campo, Apellido será igual a NombrePatrimonio
primero! last = split () ....
si primero! last <> rst! patrn_name) entonces primero! first = split () ....
Tienes dos divisiones: una para comas; otro por espacio Por lo tanto, declare dos matrices de cadenas para contener los resultados de esas divisiones.
Dim astrComma() As String
Dim astrSpace() As String
Entonces creo que será más sencillo usar esas matrices en tu ciclo.
rst.Edit
astrComma = Split(rst!PATRN_NAME, ",")
If UBound(astrComma) > 0 Then
'' this means PATRN_NAME contains at least one comma,
'' so assume LAST_NAME is everything before first comma
rst!LAST_NAME = astrComma(0)
'' expect FIRST_NAME present in second member of astrComma
astrSpace = Split(Trim(astrComma(1)), " ")
Else
MsgBox "no LAST_NAME in " & rst!PATRN_NAME
End If
If UBound(astrSpace) >= 0 Then
'' you may also want to check whether this is an empty
'' string before you store it; does the field allow
'' empty strings?
rst!FIRST_NAME = astrSpace(0)
Else
MsgBox "no FIRST_NAME in " & rst!PATRN_NAME
End If
rst.Update