Buenas tardes, estoy empezando a manejarme con las macros con más voluntad que exito, así que me gustaría hacer dos preguntas sobre macros. Las dos son igual de dificiles.
La primera es, si existe la posibilidad de hacer macros en la vida real. Me explico. Hay veces cuando me levanto por la mañana que mi cuerpo me pide que liquide todas las tareas del comienzo del día de un plumazo. La ducha, los dientes, afeitarse... ¿existe alguna forma a tra´vés de una macro en la que pueda ir directamente a la mesa con el desayuno puesto y el periodico preparado?
La siguiente cuestión es igual de complicada a mi entender. En el trabajo he hecho una plantilla con varios gráficos. Los graficos son dinámicos ya que vienen de una tabla dinámica. En ellos dan información a distintos aspectos según el departamento que tengas seleccionado en el filtro. Hay varios departamentos en la empresa y me gustaría sacar en pdf un documento con las plantillas de todos los departamentos. Actualmente lo hago manualmente modificando el departamento en el filtro de los gráficos dinámicos y después lo convierto en pdf.
¿Se puede hacer una macro que haga ese trabajo por mi? o es más probable que un día alguien me lleve el desayuno a la cama?
Muchas gracias.
Respecto de la macro para despertarte, el problema no es la macro, sino en qué evento poner el código y quién lo tiene que ejecutar.
Yo lo pondria en el evento "beep" de tu despertador, que se produce cuando suena la alarma
Private Sub Despertador_beep(ByVal Target As Range)
Call RutinaMatutina
End Sub
y luego, en tu módulo de código pondría el procedimiento RutinaMatutina con todas las cosas que tengas que hacer por las mañanas, por ejemplo:
Private Sub RutinaMatutina()
If Me.sueño > vbMucho Then
Call VolverADormirme
Exit Sub
End If
With Me.body
.bostezar(3)
.estirarBrazos(1)
.frotarOjos(2)
' y todo lo que se te ocurra
End With
End Sub
Respecto de lo que comentas de la tabla dinámica, puedes hacerlo sin necesidad de una macro, entre las opciones de la tabla dinámica tienes la de mostrar páginas de filtro de informes que genera en tu libro tantas hojas como sean necesarias cada una con la tabla dinámica con un valor para el campo de página. Una vez creadas estas páginas, con seleccionar todas las estañas e imprimirlas, ya tienes el trabajo hecho en sólo un par de clics de ratón.
Si de todas maneras quieres tener una macro porque no lo vas a usar tú, sino otras personas que tal vez no conozcan esta posibilidad que te acabo de comentar, simplemente bastaría con hacer una macro que fuese cambiando el filtro de página, recorriendo todos los valores que puede tomar este campo que utilizas como filtro de página, e imprimiendo la hoja cada vez o haciendo con ella lo que necesites.
El objeto PivotTable pertenece a la colección PivotTables, que a su vez pertenece al objeto Worksheet.En el objeto PivotTable tenemos la propiedad PageField para obtener los campos que se utilizan como campos de página.Para referirte a cada uno de los datos que tienes en el campo de página tienes el objeto PivotItem
Con todo esto, podrías hacer una macro como esta que recorra todos los elementos del campo de página de la tabla. supongo que sólo hay una tabla dinámica en la hoja que quieres imprimir:
Sub RecorrerTodasLasPáginas()
' recorre (e imprime) todas las páginas de la tabla dinámica (suponemos sólo una)
' Dentro de la hoja activa
Dim Campo As PivotField
Dim ValorPágina As PivotItem
With ActiveSheet.PivotTables(1)'suponemos que sólo hay una tabla
For Each Campo In .PageFields
For Each ValorPágina In Campo.PivotItems
Campo.CurrentPage = ValorPágina.Value
ActiveSheet.PrintOut
Next
Next
End With
------
Ya sé Excel, pero necesito más
La potencia sin control no sirve de nada.
End Sub
------
Ya sé Excel, pero necesito más.
Muchísimas gracias.
De momento creo que me voy a conformar con la generación de informes de la tabla dinámica.
es una herramienta tremenda.
Me ha quedado una duda con la macro. Cuando supones que es una sóla tabla, ¿pueden ser varias tablas, copias de una original?
Gracias.
digo que sólo hay una tabla, porque estoy empleando PivotTables(1)
------
Ya sé Excel, pero necesito más.