Excel - Propiedad Parent.SlicerCaches(1)

 
Vista:

Propiedad Parent.SlicerCaches(1)

Publicado por Diego23 (2 intervenciones) el 25/06/2020 09:01:45
Buenos días.

Una de mis macros tiene el siguiente trozo de código vba relacionado con los slicers de las tablas dinámicas. Esta macro actua sobre diferentes libros excels.

Set slSlicer = wsHoja.Parent.SlicerCaches(1)
'Aquí siguen el conjunto de instrucciones que debe realizar la macro relacionadas con el slSlicer seleccionado, en este caso es el Slicer 1.

El problema es que el slicer sobre el que debe realizar una serie de instrucciones dadas por la macro no es en todos los libros el nº1. En algunos libros excel es el slicer 1, en otros es el 2, en otros el 4, etc.
La información sobre el slicer sobre el que debe actuar la macro la tengo guardada en un vector llamado slicer_cache, slicer_cache=(1, 2, 4, 2). Mi intención es escribir la macro de la siguiente manera pero no funciona:

1) Set slSlicer = wsHoja.Parent.SlicerCaches(slicer_cache)
2) Set slSlicer = wsHoja.Parent.SlicerCaches(slicer_cache (x))
3) a = slicer_cache
Set slSlicer = wsHoja.Parent.SlicerCaches(a)

No funciona ninguna de las 3 maneras. No sé si es por algo que no es correcto, o porque la instrucción Parent.SlicerCaces no se le puede pasar una variable.


La única solución que veo es escribir la macro así:

Si el libro se llama "Libro1" entonces Set slSlicer = wsHoja.Parent.SlicerCaches(1)
Si el libro se llama "Libro2" entonces Set slSlicer = wsHoja.Parent.SlicerCaches(2)
Si el libro se llama "Libro3" entonces Set slSlicer = wsHoja.Parent.SlicerCaches(4)
Si el libro se llama "Libro4" entonces Set slSlicer = wsHoja.Parent.SlicerCaches(2)


¿Alguna solución para escribir el código de la macro de la manera más simple?

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Andres Leonardo
Val: 3.853
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Propiedad Parent.SlicerCaches(1)

Publicado por Andres Leonardo (1490 intervenciones) el 25/06/2020 18:28:06
Hola Diego,
Como sabes el nombre del libro valida el nombre y quemas el trozo de codigo

ademas el libro lo puedes pasar como parametro puede ser el nombre de la hoja o el NUMERO de hoja y lo validas asi
Espero te sirva...


1
2
3
4
5
6
7
8
9
10
11
12
select case libro
case "Libro1"
  Set slSlicer = wsHoja.Parent.SlicerCaches(1)
case "Libro2"
Set slSlicer = wsHoja.Parent.SlicerCaches(2)
case "Libro3"
Set slSlicer = wsHoja.Parent.SlicerCaches(4)
case "Libro4"
slSlicer = wsHoja.Parent.SlicerCaches(2)
case else
   msgbox "El libro indicado No es correcto"
end select
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Propiedad Parent.SlicerCaches(1)

Publicado por Diego23 (2 intervenciones) el 30/06/2020 12:44:51
Te agradezco tu respuesta y además es una respuesta válida porque la macro funcionará correctamente. Pero lo que busco es no tener que escribir tanto código y dejarlo más limpio y automatizado y que pueda colocar un vector como parámetro. Algo así:


1
2
3
4
5
6
for x = 0 to 10
 
Set slSlicer = wsHoja.Parent.SlicerCaches(vector_slicer_cache (x))
...instrucciones de la macro...
 
Next x
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.853
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Propiedad Parent.SlicerCaches(1)

Publicado por Andres Leonardo (1490 intervenciones) el 30/06/2020 14:30:45
Pues es lo que creo que deberia hacerse pero como dices en tu comentario anteior que no te acpeta datos.

Podrias indicar algun libro de ejemplo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar