Realizar búsqueda exacta y no aproximada o coincidencia con macro

Estoy empleando este procedimiento para realizar búsqueda de información en una hoja de Excel y llenar un formulario con la información relacionada:

Public Sub P_Buscar_Productos()
Application.ScreenUpdating = False
If Txt_Codigo_Producto.Text = "" Then
    MsgBox "Debe suministrar el código de producto para realizar la búsqueda", vbInformation, "Sistema"
Exit Sub
End If
    Set h = Sheets("Productos")
    Set B = h.Columns("B").Find(Txt_Codigo_Producto.Text)
Set h2 = Sheets("Productos")
        If Not B Is Nothing Then
            Cells(B.Row, "A").Select
            ActiveCell.Activate
            End If
    If Not B Is Nothing Then
        Me.Txt_Registro.Text = h.Cells(B.Row, "A")
        Me.Txt_Categoria.Text = h.Cells(B.Row, "C")
        Me.Txt_Id.Text = h.Cells(B.Row, "A")
        Me.Cmb_Nombre.Value = h.Cells(B.Row, "I")
        Me.Txt_Presentacion.Text = h.Cells(B.Row, "K")
        Me.Txt_U_Medida.Text = h.Cells(B.Row, "N")
        Me.Txt_Existencias.Text = h.Cells(B.Row, "R")
    If Me.Txt_Id.Text = "" Then
    MsgBox "El producto No. " & Txt_Codigo_Producto.Text & " no registra en el sistema", vbInformation, "Almacén ESM 3010"
    Me.Txt_Codigo_Producto.SetFocus
    Exit Sub
    End If
    End If
Application.ScreenUpdating = True
End Sub

El problema radica en que, si realizo la búsqueda de un producto que tenga el código 1058 que sería por ejemplo JABóN, pero si hay antes otro producto con un código más largo que también tenga 1058, por ejemplo 7702410586541 o, 770251451058, me trae la primera coincidencia donde esté "1058" y no me trae específicamente el código 1058 nada más.

¿Cómo puedo corregir ese problema?

1 respuesta

Respuesta
1

Bastaría con cambiar esta línea:

Set b = h.Range("B:B").Find(Txt_Codigo_Producto.Text, , xlValues, xlWhole, , , False)

Pero también te entrego el código depurando algunas líneas que no son necesarias:

Private Sub P_Buscar_Productos_Click()
  Dim h As Worksheet, b As Range
  '
  If Txt_Codigo_Producto.Text = "" Then
    MsgBox "Debe suministrar el código de producto para realizar la búsqueda", vbInformation, "Sistema"
    Exit Sub
  End If
  Set h = Sheets("Productos")
  Set b = h.Range("B:B").Find(Txt_Codigo_Producto.Text, , xlValues, xlWhole, , , False)
  If Not b Is Nothing Then
    Me.Txt_Registro.Text = h.Cells(b.Row, "A")
    Me.Txt_Categoria.Text = h.Cells(b.Row, "C")
    Me.Txt_Id.Text = h.Cells(b.Row, "A")
    Me.Cmb_Nombre.Value = h.Cells(b.Row, "I")
    Me.Txt_Presentacion.Text = h.Cells(b.Row, "K")
    Me.Txt_U_Medida.Text = h.Cells(b.Row, "N")
    Me.Txt_Existencias.Text = h.Cells(b.Row, "R")
    If Me.Txt_Id.Text = "" Then
      MsgBox "El producto No. " & Txt_Codigo_Producto.Text & " no registra en el sistema", vbInformation, "Almacén ESM 3010"
      Me.Txt_Codigo_Producto.SetFocus
      Exit Sub
    End If
  End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas