Como seleccionar más de 1 criterio de filtro en una Tabla Dinámica, desde un Combobox en una Macro de Excel

El Combobox selecciona sus datos desde una hoja, que puede ser actualizada por el usuario, por lo tanto es variable y no tengo control sobre esos datos.

Necesito seleccionar desde el filtro, el dato que seleccione el usuario y además el filtro "en blanco"

Cuando hago esto "a mano" (sin usar la Macro), des selecciono todos los items y selecciono 1 item y el item "en blanco", pero veo que desde la macro no puedo des seleccionar todos los items.

Cuando grabo una macro realizando los pasos que haría a mano, veo que la macro lo que hace es des seleccionar todos los items que no son los que elegí.

Por ejemplo, yo quiero seleccionar el "Consultorio1" y "en blanco", lo que hace la macro es esto:

ActiveSheet.PivotTables("Agenda").PivotFields("Consultorio").CurrentPage = _
"(All)"
With ActiveSheet.PivotTables("Agenda").PivotFields("Consultorio")
.PivotItems("(blank)").Visible = False
.PivotItems("Consultorio2").Visible = False
End With
ActiveSheet.PivotTables("Agenda").PivotFields("Consultorio"). _
EnableMultiplePageItems = True
ActiveSheet.PivotTables("Agenda").PivotFields("Consultorio").CurrentPage = _
"(All)"
With ActiveSheet.PivotTables("Agenda").PivotFields("Consultorio")
.PivotItems("(blank)").Visible = True
End With

¿Alguna idea de como solucionarlo?

2 Respuestas

Respuesta
2

Prueba la siguiente macro.

Crea un combobox de Control ActiveX

Pon el código en los eventos de tu hoja.

Cada que cambies el dato en el combobox1, en automático se filtrará la tabla dinámica.

Si borras el contenido del combobox1, se mostrarán todos los datos.

Private Sub ComboBox1_Change()
'                Por Dante Amor
'            Filtrar tabla dinámica
' Con el valor del combobox1 y el dato en blanco
'
  Dim pt As PivotTable
  Dim pf As PivotField
  Dim pi As PivotItem
  Dim n  As Long
  '
  Set pt = ActiveSheet.PivotTables("Agenda")
  Set pf = pt.PivotFields("Consultorio")
  With pt.PivotCache
    .MissingItemsLimit = xlMissingItemsNone
    .Refresh
  End With
  '
  n = 0
  With pf
    .ClearAllFilters
    If ComboBox1.Value = "" Then Exit Sub
    For Each pi In .PivotItems
      If pi <> ComboBox1.Value And pi <> "(blank)" Then
        n = n + 1
        If n < .PivotItems.Count Then
          pi.Visible = False
        Else
          MsgBox "No existe el dato seleccionado y no hay datos 'en blanco'"
          .ClearAllFilters
        End If
      End If
    Next
  End With
  pt.PivotCache.MissingItemsLimit = xlMissingItemsDefault
End Sub
Respuesta

Darío, no tengo ni idea de Excel, para eso están los grandes como Dante o Elsa, pero para deseleccionar los items seleccionados basta con

Dim F As byte
For F = 0 To ListBox1.ListCount
ListBox1.Selected(F) = False
Next F

Y no tienes que ir uno a uno

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas