Usar BUSCARV en formulario de Excel vba e identificar texto, números y fechas

Éste artículo que les comparto es una combinación de dos artículos publicados anteriormente en este mismo Blog y que nos muestran cómo usar la función BUSCARV o VLOOKUP desde vba.

Ver video Identificar valores de texto, número y fecha en Formulario con BUSCARV

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Cómo funciona

Tenemos una lista con dos columnas, donde la primera columna almacenará datos numéricos, alfanuméricos y fechas. La función VLOOKUP arrojará el dato de la segunda columna si la búsqueda fue exitosa.

image

Figura 1. BUSCARV desde formulario de Excel vba.

En caso de que el valor buscado no exista en la tabla, se mostrará la leyenda “El valor [valoe] no fue encontrado”.

image

Figura 2. Al no encontrar el valor, se mostrará una leyenda indicándolo.

Regresar el “foco” al TextBox

Añadí a este ejemplo el procedimiento de regresarle el “foco” al TextBox donde se ingresa el valor a buscar, es decir, que cuando se ingrese el valor, si éste es válido o no, el cursos regresará al mismo TextBox. Esto lo logramos con el método SetFocus aplicado al TextBox:

Me.TextBox1.SetFocus

Código vba

Ubicación: frmBUSCARV

Option Explicit
'
'---------------------------------------------------------------------------------------
' Module    : frmBUSCARV
' Author    : MVP Excel, Sergio Alejandro Campos
' Date      : 26/01/2015
' Purpose   : Uso de VLOOKUP identificando número, letras y fechas
'---------------------------------------------------------------------------------------
'
Private Sub CommandButton1_Click()
'
'Declaramos las variables.
Dim Nombre As Variant
Dim Rango As Range
Dim NombreBuscado As Variant
Dim Titulo As String
'
Titulo = "EXCELeINFO"
'
'En caso de error...
On Error GoTo ErrorHandler
'
Set Rango = Sheets(1).Range("A1").CurrentRegion
'
'Validamos si el valor es numérico.
NombreBuscado = Me.TextBox1.Value
If IsNumeric(NombreBuscado) Then
    NombreBuscado = CDbl(NombreBuscado)
ElseIf IsDate(NombreBuscado) Then
    'NombreBuscado = CDate(NombreBuscado)
    NombreBuscado = CLng(CDate(NombreBuscado))
End If
'
'Asignamos a la variable Nombre el resultado del BUSCARV.
Nombre = Application.WorksheetFunction.VLookup(NombreBuscado, Rango, 2, 0)
'
'Pasamos el resultado al cuadro de texto (TextBox).
With Me
    .TextBox2.Value = Nombre
    .lblMensaje.Visible = False
    .TextBox1.SetFocus
End With
'
Exit Sub
'
'De haberse encontrado un error mostramos mensajes.
ErrorHandler:
If Err.Number = 1004 Then
    With Me
        .lblMensaje.Caption = "El valor '" & NombreBuscado & "' no fue encontrado."
        .lblMensaje.Visible = True
        .TextBox1.SetFocus
    End With
Else
    MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, Titulo
End If
End Sub
'
'
Private Sub UserForm_Initialize()
'
'Ocultamos controles.
With Me
    .TextBox2.Enabled = False
    .lblMensaje.Visible = False
End With
'
End Sub

:: Descarga el ejemplo Formulario de Buscarv con Excel vba identificando números, letras y fechas.rar

You may also like...

2 Responses

  1. Abimelec Reyes says:

    HOLA NECESITO UNA AYUDA SI QUIERO BUSCAR EN OTRA CELDA EJEMPLO Set Rango = Sheets(1).Range(“H1”).CurrentRegion; pero cuando lo hago siempre comienza a buscar por “A1” me puede ayudar hacer busqueda de cualquier celda especificando la en rango.

    • William Fernando Macias Nossa says:

      en Range se debe colocar las columnas que contienen los datos,lo hice así, y funciono
      Private Sub Boton1_Click()
      TextBox1.Enabled = False
      ‘Declaramos las variables.
      Dim Nombre As Variant
      Dim Rango As Range
      Dim NombreBuscado As Variant
      Dim Titulo As String

      Set Rango = ThisWorkbook.Sheets(“Hoja1”).Range(“B:C”) ‘se establece el rango donde esta el dato buscado

      NombreBuscado = Me.TextBox1.Value ‘

      If IsNumeric(NombreBuscado) Then
      NombreBuscado = CDbl(NombreBuscado)
      End If

      ‘Asignamos a la variable Nombre el resultado del BUSCARV.
      Nombre = Application.WorksheetFunction.VLookup(NombreBuscado, Rango, 2, 0)
      ‘Pasamos el resultado al cuadro de texto (TextBox).
      With Me
      TextBox2.Value = Nombre

Leave a Reply

Your email address will not be published.

%d bloggers like this: