Filtro de tabla dinámica según celda calculada
Publicado por Luis Henriquez (1 intervención) el 06/11/2014 19:34:30
Buenas tardes, muchos sabría agradecer su ayuda en cuanto al siguiente caso:
En una hoja de Excel tengo una CELDA CALCULADA, que es el resultado de una fórmula Buscarv, ésta fórmula se actualiza cuando cambio el valor buscado que está en otra celda.
Necesito que el FILTRO DE UNA TABLA DINÁMICA, se cambie cuando la CELDA CALCULADA cambie.
Yo logré modificar una macro que encontré y funciona siempre y cuando el valor en la “Celda Calculada” lo introduzca manualmente, de lo contrario, la macro no detecta cambios al actualizar una fórmula.
Ésta es la macro:
Private Sub Worksheet Change(By Val Target As Range)
If Not Intersect(Target, Range("F1")) Is Nothing Then
Dim hijab As Worksheet
Dim td As PivotTable
'Recorrer todas las hojas del libro
For Each hijab In ThisWorkbook.Worksheets
'Recorrer las tablas dinámicas de la hoja
For Each td In hoja.PivotTables
'En base al campo Región de la tabla dinámica:
With td.PivotFields("Region")
'Limpiar todos los filtros
.ClearAllFilters
'Filtrar por el valor de la celda F1
On Error Resume Next
.CurrentPage = Range("F1").Value
End With
Next td
Next
End If
End Sub
Averiguando, encontré que para detectar los cambios al actualizar una fórmula en una celda se debe usar el evento Worksheet_Calculate, en vez del WorkSheet_Change (Usado en la macro).
Pero no sé cómo integrar ese evento, ya que intercambiándolos no funciona.
En una hoja de Excel tengo una CELDA CALCULADA, que es el resultado de una fórmula Buscarv, ésta fórmula se actualiza cuando cambio el valor buscado que está en otra celda.
Necesito que el FILTRO DE UNA TABLA DINÁMICA, se cambie cuando la CELDA CALCULADA cambie.
Yo logré modificar una macro que encontré y funciona siempre y cuando el valor en la “Celda Calculada” lo introduzca manualmente, de lo contrario, la macro no detecta cambios al actualizar una fórmula.
Ésta es la macro:
Private Sub Worksheet Change(By Val Target As Range)
If Not Intersect(Target, Range("F1")) Is Nothing Then
Dim hijab As Worksheet
Dim td As PivotTable
'Recorrer todas las hojas del libro
For Each hijab In ThisWorkbook.Worksheets
'Recorrer las tablas dinámicas de la hoja
For Each td In hoja.PivotTables
'En base al campo Región de la tabla dinámica:
With td.PivotFields("Region")
'Limpiar todos los filtros
.ClearAllFilters
'Filtrar por el valor de la celda F1
On Error Resume Next
.CurrentPage = Range("F1").Value
End With
Next td
Next
End If
End Sub
Averiguando, encontré que para detectar los cambios al actualizar una fórmula en una celda se debe usar el evento Worksheet_Calculate, en vez del WorkSheet_Change (Usado en la macro).
Pero no sé cómo integrar ese evento, ya que intercambiándolos no funciona.
Valora esta pregunta
0