Búsqueda inteligente en exel con macros y TextBox

Estoy creando un buscador inteligente en exel utilizando una table dinámica, macro y un TextBox que hacen referencia a una base de datos con campos (A7-Identidad/B7-Nombres/C7-Lugar/D7-Responsable/E7-Partido), el problema es cuando escribo en el TextBox el nombre y lo selecciono el dato que necesito no me lo muestra que debo hacer. Le muestro los códigos quizá algo esta mal...

_______________________________________________________________________________________________

Private Sub TextBox1_Change()

Application.ScreenUpdating = False

If TextBox1.Text = "" Then
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").ClearAllFilters
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").PivotFilters.Add Type:=xlCaptionEquals, Value1:=""
Columns(4).ColumnWidth = 30.29
Range("C7").FormulaR1C1 = ""
Else
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").ClearAllFilters
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").PivotFilters.Add Type:=xlCaptionContains, Value1:=TextBox1.Text
Columns(4).ColumnWidth = 30.29
End If

End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Application.ScreenUpdating = False

Cancel = True
If Not Intersect(Target, Range("E18:E600")) Is Nothing Then
TextBox1.Text = ActiveCell.Text
Range("C7").Value = WorksheetFunction.Match(TextBox1.Text, Sheets("BASE DE DATOS").Range("B8:B600"), 0)
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").ClearAllFilters
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").PivotFilters.Add Type:=xlCaptionEquals, Value1:=""
Columns(4).ColumnWidth = 30.29
TextBox1.Activate
End If

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False

On Error Resume Next

If Not Intersect(Target, Range("C7")) Is Nothing Then
If Range("C7").Text <> "" Then
TextBox1.Text = WorksheetFunction.VLookup(Range("C7"), Sheets("BASE DE DATOS").Range("A8:E600"), 2, False)
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").ClearAllFilters
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").PivotFilters.Add Type:=xlCaptionEquals, Value1:=""
Columns(4).ColumnWidth = 30.29
Range("C7").Select
Else
TextBox1.Text = ""
End If
End If

End Sub

1 Respuesta

Respuesta
2

H o l a:

Envíame tu archivo para revisarlo, en una hoja me muestras la tabla dinámica que estás trabajando.

En otra hoja me pones la tabla dinámica que esperas que la macro te genere.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Denis Geraldo Pineda” y el título de esta pregunta.

¡Gracias! El correo ya esta enviado a su dirección  

No pusiste esto:

"En otra hoja me pones la tabla dinámica que esperas que la macro te genere."

Okey

H o l a:

Arreglé los eventos que tenías, solamente necesitas 2 eventos:

Private Sub TextBox1_Change()
'Act.Por.Dante Amor
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    If TextBox1.Text = "" Then
        ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").ClearAllFilters
        ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").PivotFilters.Add Type:=xlCaptionEquals, Value1:=""
        Columns(4).ColumnWidth = 30.29
        Range("C7").FormulaR1C1 = ""
    Else
        ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").ClearAllFilters
        ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").PivotFilters.Add Type:=xlCaptionContains, Value1:=TextBox1.Text
        Columns(4).ColumnWidth = 30.29
    End If
    Application.EnableEvents = True
End Sub
'
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Act.Por.Dante Amor
    Application.ScreenUpdating = False
    'Cancel = True
    If Not Intersect(Target, Range("E18:E600")) Is Nothing Then
        Application.EnableEvents = False
        TextBox1.Text = Target
        Set b = Sheets("BASE DE DATOS").Columns("B").Find(TextBox1, lookat:=xlWhole)
        If Not b Is Nothing Then
            Range("C7") = b.Offset(, -1)
            ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").ClearAllFilters
            ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").PivotFilters.Add Type:=xlCaptionContains, Value1:=TextBox1.Text
            Range("E18").Select
            TextBox1.Activate
        End If
        Columns(4).ColumnWidth = 30.29
        Application.EnableEvents = True
    End If
End Sub

‘_

¡Gracias! agradezco su información, de verdad que funciono. Puedo ingresar mas datos en la BASE DE DATOS, y me los reconoce el TextBox.

R ecuerda cambiar la valoración de la respuesta

Hola:

Ingrese mas datos en la hoja de exel BASE DE DATOS y el TEXTBOX no me los muestra

Eso tiene que ver con tu tabla dinámica.

La tabla la tienes hasta la fila 600. Cada vez que agregues datos tienes que actualizar la tabla.

R ecuerda cambiar la valoración de la respuesta

¡Gracias! 

Hola figúrese que estoy notando otro error, ahora al buscar con el numero de identidad el nombre me aparece debajo de el TextBox.  y yo quiero que al buscar con el TextBox me refleje los datos, al igual si busco con el numero de identidad.

No entiendo, a qué te refieres con "ahora al buscar con el numero de identidad". Estás modificando la macro, ya que la macro en las líneas de tabla dinámica tiene el "nombre":

ActiveSheet. PivotTables("Tabla dinámica2"). PivotFields("NOMBRE"). ClearAllFilters
            ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("NOMBRE").PivotFilters.Add Type:=xlCaptionContains, Value1:=TextBox1.Text

Entonces no entiendo cómo estás buscando por "Identidad"

Si corresponde a otro cambio a la macro, con todo gusto te ayudo, pero deberás crear una nueva pregunta.

 A  lo que me refiero es que el buscador que yo tengo debe de buscar con numero de identidad y con el nombre,  La identidad se introduce en la casilla C7 y con la formula que yo e puesto que es Buscarv. me lo refleja.

cuando yo escribo el nombre en el textbox1 me da los datos del nombre seleccionado, pero cuando escribo el numero de identidad solo me refleja los datos pero lo que yo quiero es que el nombre quede encima del textbox1 y no debajo.

H o l a:

Agrega el siguiente evento a la hoja:

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Not Intersect(Target, Range("C7")) Is Nothing Then
        Application.EnableEvents = False
        Set b = Sheets("BASE DE DATOS").Columns("A").Find(Target, lookat:=xlWhole)
        If Not b Is Nothing Then
            TextBox1 = b.Offset(, 1)
        Else
            MsgBox "Identidad no existe"
        End If
        Application.EnableEvents = True
    End If
End Sub

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas