Buscar un registro en la columna "F"

Tengo un código que me gustaría reducir de tamaño lo que se pueda, y que antes de registrar, busque si el valor existe en la columna "F".

Private Sub btn_Registrar_Click()
'Dim fila As Integer
'Dim final As Integer
'Dim Registro As Integer
'Dim nDoc As String
'
'Hoja6.Visible = xlSheetVisible
'Hoja6.Select
'
'        For fila = 1 To 2000
'            If Hoja6.Cells(fila, 1) = "" Then
'                final = fila
'                Exit For
'            End If
'        Next
'
'        For Registro = 2 To final
'            If Hoja6.Cells(Registro, 1) = Me.Txt_NIF Then
'                Me.Txt_NIF.BackColor = &H8080FF
'                MsgBox ("El cliente introducido ya está registrado")
'                Me.Txt_NombreApellido.SetFocus
'                Exit Sub
'                Exit For
'            End If
'        Next
'       nDoc = Application.InputBox("Ingrese el Tipo de Documento")
'
'      If MsgBox("Son correctos los datos?", vbOKCancel) = vbOK Then
'                'Me.Txt_NIF.BackColor = &HE0E0E0
'                Hoja6.Cells(final, 1) = nDoc & "-" & Me.Txt_NIF.Text
'                Hoja6.Cells(final, 2) = Me.Txt_NombreApellido.Text
'                Hoja6.Cells(final, 3) = Me.Txt_Direccion.Text
'                Hoja6.Cells(final, 4) = Me.Txt_Provincia.Text
'                Hoja6.Cells(final, 5) = Me.Txt_CodigoPos.Text
'                Hoja6.Cells(final, 6) = Me.Txt_Telefono.Text
'                
'                Me.Txt_NIF = ""
'                Me.Txt_NombreApellido = ""
'                Me.Txt_CodigoPos = ""
'                Me.Txt_Direccion = ""
'                Me.Txt_Provincia = ""
'                Me.Txt_Telefono = ""
'                Me.Txt_NombreApellido.SetFocus
'            Else
'                Exit Sub
'    End If
'    Hoja6.Visible = xlSheetVeryHidden
End Sub

1 respuesta

Respuesta
2

Ya te había entregado un código para buscar el registro.

No entiendo algunas cosas:

1. Con el código que te envié no es necesario hacer visible la hoja. ¿Por qué regresaste a tu código?

2. Si estás en un userform, para qué pones un input box. Cualquier dato que necesites, agrega un nuevo textbox. Un input box agrega otro paso al proceso.

ndoc = Application.InputBox("Ingrese el Tipo de Documento")

3. Si en la celda de la columna A, agregas el ndoc & "-" & Me.Txt_NIF.Text, entonces cómo quieres realizar la búsqueda del siguiente Txt_NIF.

Si en ndoc capturas 123. Cómo vas a buscar el Txt_NIF si no sabes que fue guardado como:

123-8888.


Este sería el código para encontrar la última fila:

uf = Hoja6.Range("A" & Rows.Count).End(3).Row + 1

Para buscar un dato:

  Set f = Hoja6.Range("A:A").Find(Txt_NIF, , xlValues, xlPart)
  If f Is Nothing Then
    Txt_NIF.BackColor = &H8080FF
    MsgBox ("El cliente introducido ya está registrado")
    Me.Txt_NombreApellido.SetFocus
    Exit Sub
  End If

Pero el código solamente busca el txt_NIF, porque en la columna estás agregando el ndoc.


Mi recomendación sería que agregues otro campo en el form para ndoc, juntes los dos datos en la columna A.

Para buscar, capturas el ndoc y nif, juntas los datos y entonces lo buscas. No lo entiendo.


Si gustas te puedo seguir ayudando con tu código, pero necesito entender qué quieres hacer con el ndoc y el nif.


Si no quieres mis consejos, no te preocupes, simplemente ignora mi respuesta y esperemos a que alguien más venga en nuestra ayuda.

Busque si el valor existe en la columna "F".

Ah y otra cosa. ¿En la columna F estás guardando el teléfono? ¿No deberías buscar en la columna A?

Te anexo el código completo:

Private Sub btn_Registrar_Click()
  Dim uf As Long, f As Range, ndoc As Variant
  '
  uf = Hoja6.Range("A" & Rows.Count).End(3).Row + 1
  Set f = Hoja6.Range("A:A").Find(Txt_NIF, , xlValues, xlPart)
  If Not f Is Nothing Then
    Txt_NIF.BackColor = &H8080FF
    MsgBox ("El cliente introducido ya está registrado")
    Me.Txt_NombreApellido.SetFocus
    Exit Sub
  End If
  ndoc = Application.InputBox("Ingrese el Tipo de Documento")
  If ndoc = "" Or ndoc = False Then Exit Sub
  If MsgBox("Son correctos los datos?", vbOKCancel) = vbOK Then
    Hoja6.Cells(uf, 1) = ndoc & "-" & Me.Txt_NIF.Text
    Hoja6.Cells(uf, 2) = Me.Txt_NombreApellido.Text
    Hoja6.Cells(uf, 3) = Me.Txt_Direccion.Text
    Hoja6.Cells(uf, 4) = Me.Txt_Provincia.Text
    Hoja6.Cells(uf, 5) = Me.Txt_CodigoPos.Text
    Hoja6.Cells(uf, 6) = Me.Txt_Telefono.Text
    Me.Txt_NIF = ""
    Me.Txt_NombreApellido = ""
    Me.Txt_CodigoPos = ""
    Me.Txt_Direccion = ""
    Me.Txt_Provincia = ""
    Me.Txt_Telefono = ""
    Me.Txt_NombreApellido.SetFocus
  End If
End Sub

Si no quieres mis consejos, no te preocupes, simplemente ignora mi respuesta y esperemos a que alguien más venga en nuestra ayuda.

Gracias Dante Amor, muchas gracias. Por supuesto que acepto su consejo, el problema es que no me expliqué bien y en la anterior consulta no entendió lo que necesitaba, pero mea culpa.

Quería buscar en la columna "F" por que me daba problemas la búsqueda en la columna "A" , precisamente por el imputbox. Tienes razón y voy a tener que hacer una modificación añadiendo un textbox para el tipo de documento.

Para que lo entiendas mejor inserto una imagen de la hoja.

Lo que quiero es concatenar el número de documento con el tipo (NIF. DNI. PASS).  Pero si me sigue dando problemas con la búsqueda, quizás decida suprimir la opción tipo de documento y dejarlo solo con el número.

Muchas gracias de nuevo Dante.

Si tienes un catálogo de tipos de documento, entonces agrega un combobox.

Considera la siguiente solución:

Private Sub btn_Registrar_Click()
  Dim uf As Long, f As Range
  '
  'VALIDACIONES
  If ComboBox1.ListIndex = -1 Then
    MsgBox "Selecciona el doc"
    ComboBox1.SetFocus
    Exit Sub
  End If
  '
  If Txt_NIF = "" Then
    MsgBox "Captura el NIF"
    Txt_NIF.SetFocus
    Exit Sub
  End If
  '
  Set f = Hoja6.Range("A:A").Find(ComboBox1 & "-" & Txt_NIF, , xlValues, xlWhole)
  If Not f Is Nothing Then
    ComboBox1.BackColor = &H8080FF
    Txt_NIF.BackColor = &H8080FF
    MsgBox ("El cliente introducido ya está registrado")
    Me.Txt_NIF.SetFocus
    Exit Sub
  End If
  '
  'REGISTRAR DATOS
  uf = Hoja6.Range("A" & Rows.Count).End(3).Row + 1
  Hoja6.Cells(uf, 1) = ComboBox1.Value & "-" & Txt_NIF.Value
  Hoja6.Cells(uf, 2) = Txt_NombreApellido.Text
  Hoja6.Cells(uf, 3) = Txt_Direccion.Text
  Hoja6.Cells(uf, 4) = Txt_Provincia.Text
  Hoja6.Cells(uf, 5) = Txt_CodigoPos.Text
  Hoja6.Cells(uf, 6) = Txt_Telefono.Text
  '
  'LIMPIAR DATOS
  ComboBox1 = ""
  Txt_NIF = ""
  Txt_NombreApellido = ""
  Txt_CodigoPos = ""
  Txt_Direccion = ""
  Txt_Provincia = ""
  Txt_Telefono = ""
  ComboBox1.BackColor = &H80000005
  Txt_NIF.BackColor = &H80000005
  ComboBox1.SetFocus
End Sub
Private Sub UserForm_Activate()
  ComboBox1. AddItem "NIF"
  ComboBox1. AddItem "DNI"
  ComboBox1. AddItem "PASS"
End Sub

¡Gracias!  Muchas gracias por tu aporte. He añadido el combo y el resultado es mucho mejor. Eres el mejor.

Me alegra ayudarte, gra cias por tu comentarios.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas