Como filtrar ingreso de datos con una base de datos?

Tengo un aplicativo con el cual ingreso el nombre del autor de unos libros a través de dos TextBox, uno para ingresar el Nombre y otro para ingresar el Apellido. El asunto es que a medida que se ingresen los caracteres del Apellido se debe comparar con datos almacenados en una hoja de cálculo llamada CUTTER que está compuesta por 21 columnas de una por cada letra del alfabeto. Si por ejemplo se ingresa el Apellido Alvarez el buscador debe buscar por la columna A, el renglón 473Alvare que es el que más coincide con el ingreso. Y debe guardar en la base de datos la Cota (A473) que se compone de la primera letra junto con el número adjunto. Pero el aplicativo que realice solamente busca en la primera columna y no en el resto. Adjunto el código del aplicativo. Ayúdenme. Gracias...

Private Sub UserForm_Initialize()
'Cambiamos el color del Userfom
Me.BackColor = RGB(50, 50, 70)

Dim pai As Range
Dim iss As Range
Set pai = Range("PAIS")
For Each iss In pai
CBoxPais.AddItem iss.Value
Next iss
End Sub
Private Sub Apellido_Change()
On Error GoTo ERR:
'Color azul al entrar al campo
Me.Apellido.BackColor = &HFFFFC0
'Contador de lineas
NumDatos = Hoja2.Range("A" & Rows.Count).End(xlUp).Row

'Detiene el contador de lineas
Hoja2.AutoFilterMode = False

For nFila = 2 To NumDatos
NomAutor = Hoja2.Cells(nFila, 1).Value
If UCase(NomAutor) Like "*" & UCase(Me.Apellido.Value) & "*" Then
nom = Mid(NomAutor, 1, 3)
num = Mid(NomAutor, 4, 1)

Cota = num & nom
End If
Next
ERR:
End Sub

Private Sub Apellido_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Cambio a mayúsculas
If (KeyAscii >= 97 And KeyAscii <= 122) Or (KeyAscii = 233) Or (KeyAscii = 237) Or (KeyAscii = 241) Or (KeyAscii = 243) Or (KeyAscii = 250) Then
KeyAscii = VBA.Asc(VBA.UCase(VBA.Chr(KeyAscii)))
End If

If (KeyAscii >= 48) And (KeyAscii <= 57) Then
MsgBox "Solo letras"
KeyAscii = 8
End If
End Sub
Private Sub Aceptar_Click()

Sheets("BDATOS").Select
NR = Application.WorksheetFunction.CountA(Range("A:A"))
If Nombre = "" Then
MsgBox "INGRESE NOMBRE"
Nombre.SetFocus
Exit Sub
End If
If Apellido = "" Then
MsgBox "INGRESE APELLIDO"
Apellido.SetFocus
Exit Sub
If CBoxPais = "" Then
MsgBox "SELECCIONE UN PAIS"
CBoxPais.SetFocus
Exit Sub
End If
End If
Cells(NR + 1, 1) = Nombre
Cells(NR + 1, 2) = Apellido
Cells(NR + 1, 3) = CBoxPais
Cells(NR + 1, 4) = Cota
Nombre = ""
Apellido = ""
CBoxPais = ""
Cota = ""
Nombre.SetFocus

End Sub

Private Sub Nombre_Change()
'Color azul al entrar al campo
Me.Nombre.BackColor = &HFFFFC0
End Sub

Private Sub Nombre_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Cambio a mayúsculas
If (KeyAscii >= 97 And KeyAscii <= 122) Or (KeyAscii = 233) Or (KeyAscii = 237) Or (KeyAscii = 241) Or (KeyAscii = 243) Or (KeyAscii = 250) Then
KeyAscii = VBA.Asc(VBA.UCase(VBA.Chr(KeyAscii)))
End If

If (KeyAscii >= 48) And (KeyAscii <= 57) Then
MsgBox "Solo letras"
KeyAscii = 8
End If
End Sub

1 Respuesta

Respuesta
1

Te dejo el ajuste a la macro del evento Change del Apellido, que es la que busca coincidencias en la otra hoja:

Private Sub Apellido_Change()
    On Error GoTo ERR:
If Apellido = "Apellido" Then Exit Sub
    'Color azul al entrar al campo
    Me.Apellido.BackColor = &HFFFFC0
    'Contador de lineas
    NumDatos = Hoja2.UsedRange.Rows.Count
    'Detiene el contador de lineas
    Hoja2.AutoFilterMode = False
    'letra de la columna
    letra = UCase(Left(Apellido, 1))
        For nFila = 2 To NumDatos
            'se busca a partir de fila 2 y en la col de la inicial del apellido
            nomAutor = Hoja2.Cells(nFila, letra).Value
            If UCase(nomAutor) Like "*" & UCase(Me.Apellido.Value) & "*" Then
            nom = Mid(nomAutor, 1, 3)
            num = Mid(nomAutor, 4, 1)
            Cota = num & nom
            End If
        Next
ERR:
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas