visual uso openrecordset ejemplo dbopendynaset currentdb vba ms-access access-vba dao

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