-
8/17/2019 Crear Gráficos e Informes de Tabla Dinámica Con VBA en Excel 2010
1/8
10/9/2015 C rear gr áfi cos e i nfor mes de tabl a di nám ica con VBA en Excel 2010
https://msdn.microsoft.com/es-es/library/office/hh243933(v=office.14).aspx 1/8
Al usar este sitio acepta el uso de cookies para análisis, contenido personalizado y publicidad. Saber más
Crear gráficos e informes de tabla dinámica con VBAen Excel 2010
Resumen: obtenga información acerca de cómo usar Visual Basic para Aplicaciones VBA en Microsoft Excel 2010 con el fin de crear y manipulargráficos e informes de tabla dinámica. El uso de código para crear informes y gráficos de tabla dinámica puede ayudarle a realizar estas tareas varias
veces y con mayor eficacia.
Última modificación: domingo, 05 de junio de 2011
Hace ref erencia a: Excel 2010 | Office 2010 | SharePoint Server 2010 | VBA
En este artículo Inf ormación general sobre el uso de VBA con gráficos e informes de tabla dinámica
Crear un informe de tabla dinámica mediante VBA
Crear un gráfico mediante VBA
Realizar cambios en un gráfico incrustado
Crear un gráfico basado en un informe de tabla dinámica
Conclusión Recursos adicionales
Se aplica a: Microsoft Excel 2010
Publicado: junio de 2011
Proporcionado por: Dr. Gerard M. Verschuuren, Mr. Excel en inglés | Mark Roberts, Microsoft Corporation
Contenido
Información general sobre el uso de VBA con gráficos e informes de tabla dinámica
Crear un informe de tabla dinámica mediante VBA
Crear un gráfico mediante VBA
Realizar cambios en un gráfico incrustado
Crear un gráfico basado en un informe de tabla dinámica
Conclusión
Recursos adicionales
Descargue el libro de ejemplo sobre la creación de gráficos e informes de tabla dinámica con VBA PivotTablesAndCharts.xlsm
en inglés
Información general sobre el uso de VBA con gráficos e informes de tabla dinámica
Si lee este artículo y descarga el libro de ejemplo, podrá aprender a crear gráficos e informes de tabla dinámica mediante código de Visual Basic para
Aplicaciones VBA
. Para ejecutar el código descrito en este artículo con datos de ejemplo, descargue el libro de ejemplo PivotTablesAndCharts en
inglés
.
Crear un informe de tabla dinámica mediante VBA
El informe de tabla dinámica creado por la macro del libro de ejemplo CreatePivot del PivotTablesAndCharts se muestra en la figura 1.
Figura 1. Informe de tabla dinámica
Office 2010
http://void%280%29/http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://www.mrexcel.com/store/index.phphttp://-/?-http://-/?-http://-/?-http://void%280%29/http://gallery.technet.microsoft.com/Excel-2010-Code-Example-c1be6ed3http://void%280%29/http://gallery.technet.microsoft.com/Excel-2010-Code-Example-c1be6ed3http://gallery.technet.microsoft.com/Excel-2010-Code-Example-c1be6ed3http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://www.mrexcel.com/store/index.phphttp://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-https://www.microsoft.com/privacystatement/es-es/core/default.aspx
-
8/17/2019 Crear Gráficos e Informes de Tabla Dinámica Con VBA en Excel 2010
2/8
10/9/2015 C rear gr áfi cos e i nfor mes de tabl a di nám ica con VBA en Excel 2010
https://msdn.microsoft.com/es-es/library/office/hh243933(v=office.14).aspx 2/8
Este informe de tabla dinámica se basa en la tabla de datos de la hoja de cálculo Employees del libro de ejemplo.
Tal como se muestra en las líneas de código siguiente, la macro CreatePivot activa la hoja de cálculo y luego usa el método PivotTableWizard para
iniciar el proceso de creación del informe de tabla dinámica.
Nota
Si presiona F8 en el editor de código para recorrer código de la macro CreatePivot línea por línea, verá que la línea de código que llama al
método PivotTableWizard agrega una nueva hoja de cálculo al libro y luego crea el nuevo informe de tabla dinámica en esa hoja.
El método PivotTableWizard devuelve un objeto de Tabla dinámica, que tiene asociada una colección de Campos dinámicos. La macro CreatePivotcontinúa agregando objetos de Campo dinámico a la colección de Campos dinámicos para especificar los siguientes campos de informe de tabladinámica.
Un campo de fila llamado DEPT
Un campo de columna llamado LOCATION
Un campo de datos basado en el campo SALARIO que usa la función SUM
Nota
Aunque en este ejemplo solo se usan un campo de fila y un campo de columna, puede agregar otros campos a la colección de camposdinámicos para crear informes de tabla dinámica que tengan varios niveles en cada dimensión.
La macro CreatePivot también agrega un campo de página para habilitar que el campo GENDER filtre el informe, tal como se muestra en las líneas de
código siguientes.
ActiveWorkbook.Sheets("Employees").Select
Range("A1").Select
Set objTable = Sheet1.PivotTableWizard
Set objField = objTable.PivotFields("DEPT")
objField.Orientation = xlRowField
Set objField = objTable.PivotFields("LOCATION")
objField.Orientation = xlColumnField
Set objField = objTable.PivotFields("SALARY")
objField.Orientation = xlDataField
objField.Function = xlSum
objField.NumberFormat = "$ #,##0"
Set objField = objTable.PivotFields("GENDER")
objField.Orientation = xlPageField
VBA
VBA
VBA
https://msdn.microsoft.com/es-es/library/office/ff820762(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff192974(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff837611(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff839228(v=office.14).aspx
-
8/17/2019 Crear Gráficos e Informes de Tabla Dinámica Con VBA en Excel 2010
3/8
10/9/2015 C rear gr áfi cos e i nfor mes de tabl a di nám ica con VBA en Excel 2010
https://msdn.microsoft.com/es-es/library/office/hh243933(v=office.14).aspx 3/8
A continuación, la macro CreatePivot muestra el nuevo informe de tabla dinámica en vista previa de impresión.
Tal como se muestra en las líneas de código siguientes, una vez el usuario ha cerrado la vista previa de impresión, la macro CreatePivot le pregunta si
desea eliminar el nuevo informe de tabla dinámica. La línea que establece la propiedad DisplayAlerts en False suprime la advertencia integrada deMicrosoft Excel que indica "Pueden existir datos en las hojas seleccionadas para eliminar".
En el listado siguiente se muestra todo el código para la macro CreatePivot.
Crear un gráfico mediante VBA
El gráfico creado por la macro CreateChart del libro de ejemplo se muestra en la figura 2.
Figura 2. Gráfico de columnas 3D
ActiveSheet.PrintPreview
Application.DisplayAlerts = False
If MsgBox("Delete the PivotTable?", vbYesNo) = vbYes Then
ActiveSheet.Delete
End If
Application.DisplayAlerts = True
Sub CreatePivot()
' Creates a PivotTable report from the table on Sheet1
' by using the PivotTableWizard method with the PivotFields
' method to specify the fields in the PivotTable.
Dim objTable As PivotTable, objField As PivotField
' Select the sheet and first cell of the table that contains the data.
ActiveWorkbook.Sheets("Employees").Select
Range("A1").Select
' Create the PivotTable object based on the Employee data on Sheet1.
Set objTable = Sheet1.PivotTableWizard
' Specify row and column fields.
Set objField = objTable.PivotFields("DEPT")
objField.Orientation = xlRowField
Set objField = objTable.PivotFields("LOCATION")
objField.Orientation = xlColumnField
' Specify a data field with its summary
' function and format.
Set objField = objTable.PivotFields("SALARY")
objField.Orientation = xlDataField
objField.Function = xlSum
objField.NumberFormat = "$ #,##0"
' Specify a page field.
Set objField = objTable.PivotFields("GENDER")
objField.Orientation = xlPageField
' Preview the new PivotTable report.
ActiveSheet.PrintPreview
' Prompt the user whether to delete the PivotTable.
Application.DisplayAlerts = False
If MsgBox("Delete the PivotTable?", vbYesNo) = vbYes Then
ActiveSheet.Delete
End If
Application.DisplayAlerts = True
End Sub
VBA
VBA
VBA
http://void%280%29/https://msdn.microsoft.com/es-es/library/office/ff839782(v=office.14).aspx
-
8/17/2019 Crear Gráficos e Informes de Tabla Dinámica Con VBA en Excel 2010
4/8
10/9/2015 C rear gr áfi cos e i nfor mes de tabl a di nám ica con VBA en Excel 2010
https://msdn.microsoft.com/es-es/library/office/hh243933(v=office.14).aspx 4/8
Este gráfico se basa en los datos de la hoja de cálculo Table del libro de ejemplo.
Las primeras líneas de la macro CreateChart seleccionan la hoja de cálculo Table y luego le piden al usuario que seleccione el rango de datos para
crear el gráfico. Si se establece el parámetro Default del método InputBox en Selection.Address y el parámetro Type en 8, se devolverá un objeto
Rango con su propiedad Address definida como la referencia del rango seleccionado por el usuario.
Las líneas de código siguientes comprueban si se ha seleccionado más de una celda y, si no es el caso, le piden al usuario que realice una selección
apropiada.
Las líneas de código siguientes hacen el trabajo de creación del gráfico. El método Add de la colección Charts crea una hoja de gráfico nueva y luego
devuelve un objeto Gráfico que se asigna a la variable objChart. A continuación, la instrucción With usa esa variable para especificar el aspecto delgráfico, empezando con el uso del método SetSourceData para especificar el rango de datos seleccionado por el usuario. Tenga en cuenta que la
línea .Legend.Delete se usa para eliminar la leyenda porque duplica la información mostrada en el tercer eje de un gráfico de columnas 3D.
ActiveWorkbook.Sheets("Table").Select
Set objSelection = _
Application.InputBox(Prompt:="Select the columns and rows to chart", _
Default:=Selection.Address, _
Type:=8)
If objSelection.Cells.Count = 1 Then
MsgBox "You must select at least one row or column for the chart range."
Exit Sub
End If
Set objChart = Charts.Add
With objChart
.SetSourceData objSelection
.ChartType = xl3DColumn
.Location xlLocationAsNewSheet
.Legend.Delete .PlotBy = xlColumns
End With
VBA
VBA
VBA
https://msdn.microsoft.com/es-es/library/office/ff841196(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff194426(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff193297(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff196568(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff838238(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff839468(v=office.14).aspx
-
8/17/2019 Crear Gráficos e Informes de Tabla Dinámica Con VBA en Excel 2010
5/8
10/9/2015 C rear gr áfi cos e i nfor mes de tabl a di nám ica con VBA en Excel 2010
https://msdn.microsoft.com/es-es/library/office/hh243933(v=office.14).aspx 5/8
Nota
En este ejemplo se crea un gráfico bastante simple. Las propiedades y los métodos del objeto Gráfico son bastante amplios. Lea el temaMiembros de gráfico para obtener información acerca de los diferentes métodos y propiedades que se pueden usar para especificar el aspecto
de un gráfico.
Las líneas de código restantes de la macro CreateChart proporcionan algunos ejemplos en los que se pide al usuario que especifique propiedades
adicionales que afecten al aspecto del gráfico, así como preguntar al usuario si desea eliminar el gráfico. En el listado siguiente se muestra todo el
código de la macro CreateChart.
Realizar cambios en un gráfico incrustado
La macro DynamicChart del libro de ejemplo muestra cómo cambiar el aspecto de un gráfico incrustado basado en la selección del usuario de filas y
columnas enteras. El aspecto del gráfico después de ejecutar la macro y de seleccionar las columnas de datos North y East se muestra en la figura 3.
Figura 3. Gráfico dinámico
Sub CreateChart()
' Create a new chart sheet from the table on Sheet2
' by using the Add method of the Charts collection.
Dim objSelection As Range, objChart As Chart
' Select the sheet that contains the data.
ActiveWorkbook.Sheets("Table").Select
' Prompt the user to select the range to chart
' and set the Range object to the specified range.
Set objSelection = _ Application.InputBox(Prompt:="Select the columns and rows to chart", _
Default:=Selection.Address, _
Type:=8)
' Verify whether a selection was made.
If objSelection.Cells.Count = 1 Then
MsgBox "You must select at least one row or column for the chart range."
Exit Sub
End If
' Create a new chart sheet and specify its source data
' and appearance.
Set objChart = Charts.Add
With objChart .ChartType = xl3DColumn
.SetSourceData objSelect
.Location xlLocationAsNewSheet
.Legend.Delete
.PlotBy = xlColumns
End With
' Ask the user whether to plot by rows instead.
If MsgBox("Or plot by rows?", vbYesNo) = vbYes Then
objChart.PlotBy = xlRows
End If
' Prompt the user for a title.
objChart.HasTitle = True
objChart.ChartTitle.Text = InputBox("Title?")
' Ask the user whether to delete the chart.
Application.DisplayAlerts = False
If MsgBox("Delete chart?", vbYesNo) = vbYes Then
ActiveSheet.Delete
End If
Application.DisplayAlerts = True
End Sub
VBA
http://void%280%29/https://msdn.microsoft.com/es-es/library/office/ff837379(v=office.14).aspx
-
8/17/2019 Crear Gráficos e Informes de Tabla Dinámica Con VBA en Excel 2010
6/8
10/9/2015 C rear gr áfi cos e i nfor mes de tabl a di nám ica con VBA en Excel 2010
https://msdn.microsoft.com/es-es/library/office/hh243933(v=office.14).aspx 6/8
Para tener acceso a un gráfico dinámico y trabajar con él, debe usar la colección ChartObjects del objeto Hoja de cálculo en lugar de la colecciónCharts del objeto Libro que se usó en el ejemplo de la sección anterior de este artículo. Las primeras líneas de código de la macro DynamicChartmuestran cómo hacerlo activando la hoja de cálculo que contiene el gráfico incrustado y luego definiendo una variable de objeto Gráfico como elprimer elemento de la colección ChartObjects de esa hoja.
Las líneas de código siguientes le piden al usuario que seleccione filas o columnas para crear un gráfico y, a continuación, asignan esa selección a una
variable de objeto Rango con la misma técnica que se mostró en la sección Crear un gráfico mediante VBA de este artículo.
Según la selección del usuario, el código determina si se usa la primera fila o la primera columna para las categorías del gráfico. Para ello, se compara
el número de filas seleccionadas con el número de columnas seleccionadas. Si el número de filas es mayor, se seleccionarán los valores de la primera
columna como categorías. Si el número de columnas es mayor, se seleccionarán como categorías los valores de la primera fila.
Las últimas líneas de código de la macro DynamicChart usan el método Union para crear un solo rango a partir de la selección del usuario y la fila o
columna que el código determina para su uso en las categorías. Por último, el código transmite ese rango al método SetSourceData para actualizar lavisualización del gráfico.
En el ejemplo de código siguiente se muestra todo el listado de la macro DynamicChart.
ActiveWorkbook.Sheets("Table+Chart").Activate
Set objChart = ActiveSheet.ChartObjects(1).Chart
r = objSelection.Rows.Count
c = objSelection.Columns.Count
If r > c Then
Set objCategories = Range(Cells(1, 1), Cells(r, 1))
Else
Set objCategories = Range(Cells(1, 1), Cells(1, c))
End If
Set objSrcData = Union(objCategories, objSelection)
objChart.SetSourceData objSrcData
Sub DynamicChart()
' Adjusts the embedded chart on Sheet3.
Dim objChart As Chart, objChObject As ChartObject
Dim objSelection As Range, objSrcData As Range, objCategories As Range
Dim r As Long, c As Long
' Activate the sheet that contains the chart.
ActiveWorkbook.Sheets("Table+Chart").Activate
' Access the chart from the ChartObject collection
' of the active sheet.
Set objChart = ActiveSheet.ChartObjects(1).Chart
' Prompt user to select the rows or columns to chart
' and set the Range object to the specified range.
Set objSelection = _
Application.InputBox(Prompt:="Select entire rows or columns to chart", _
VBA
VBA
VBA
VBA
https://msdn.microsoft.com/es-es/library/office/ff834621(v=office.14).aspxhttp://-/?-https://msdn.microsoft.com/es-es/library/office/ff822178(v=office.14).aspx
-
8/17/2019 Crear Gráficos e Informes de Tabla Dinámica Con VBA en Excel 2010
7/8
10/9/2015 C rear gr áfi cos e i nfor mes de tabl a di nám ica con VBA en Excel 2010
https://msdn.microsoft.com/es-es/library/office/hh243933(v=office.14).aspx 7/8
Crear un gráfico basado en un informe de tabla dinámica
También puede crear gráficos basados en un informe de tabla dinámica tal como lo demuestra la macro CreateChartForPivot en el libro de ejemplo. La
macro inicia su proceso llamando a la macro CreatePivot descrita en la sección Crear un informe de tabla dinámica mediante VBA de este artículo.
Uno de los principales aspectos interesantes es la línea de código que obtiene acceso al informe de tabla dinámica recién creado a partir de la
colección PivotTables de la nueva hoja de cálculo.
Otro aspecto interesante es la línea de código que usa la propiedad PivotTable para crear un rango que incluya todo el informe de tabla dinámica
excluyendo los campos de página.
Las últimas líneas de código de la macro CreateChartForPivot usan este rango para especificar los datos de origen y luego especificar el aspecto del
gráfico. Tenga en cuenta que, de nuevo, se elimina la leyenda porque duplica la información del tercer eje de un gráfico de columnas 3D.
En el ejemplo de código siguiente se muestra todo el listado de la macro CreateChartForPivot.
Default:=Selection.Address, _
Type:=8)
' Determine whether the user selected rows or columns,
' and then use either the first row or first column
' as the range for categories.
r = objSelection.Rows.Count
c = objSelection.Columns.Count
If r > c Then
Set objCategories = Range(Cells(1, 1), Cells(r, 1))
Else
Set objCategories = Range(Cells(1, 1), Cells(1, c))
End If
' Create a single range from the union of
' categories and selected data, and then
' update the chart.
Set objSrcData = Union(objCategories, objSelection)
objChart.SetSourceData objSrcData
End Sub
Set objPivot = ActiveSheet.PivotTables(1)
Set objPivRange = objPivot.TableRange1
With objChart
.SetSourceData objPivRange
.ChartType = xl3DColumn
.Legend.Delete
End With
Sub CreateChartForPivot()
' Creates a chart based on a PivotTable report.
Dim objPivot As PivotTable, objPivotRange As Range, objChart As Chart
' Call the CreatePivot macro to create a new PivotTable report.
CreatePivot
' Determine whether the user deleted the PivotTable report,
' and if so, exit the macro. If ActiveSheet.PivotTables.Count = 0 Then Exit Sub
' Access the new PivotTable from the sheet's PivotTables collection.
Set objPivot = ActiveSheet.PivotTables(1)
VBA
VBA
VBA
VBA
https://msdn.microsoft.com/es-es/library/office/ff198140(v=office.14).aspxhttp://-/?-http://void%280%29/
-
8/17/2019 Crear Gráficos e Informes de Tabla Dinámica Con VBA en Excel 2010
8/8
10/9/2015 C rear gr áfi cos e i nfor mes de tabl a di nám ica con VBA en Excel 2010
https://msdn.microsoft.com/es-es/library/office/hh243933(v=office.14).aspx 8/8
Conclusión
En este artículo y en el libro de ejemplo PivotTablesAndCharts se ofrecen ejemplos de creación de gráficos e informes de tabla dinámica mediante
código de VBA en Excel.
Recursos adicionales
Introducción a VBA en Excel 2010
Centro de desarrolladores de Excel
Centro de desarrolladores de Office
© 2015 Microsoft
' Add a new chart sheet.
Set objChart = Charts.Add
' Create a Range object that contains
' all of the PivotTable data, except the page fields.
Set objPivotRange = objPivot.TableRange1
' Specify the PivotTable data as the chart's source data.
With objChart
.SetSourceData objPivotRange
.ChartType = xl3DColumn
.Legend.Delete
End With
End Sub
https://msdn.microsoft.com/es-es/office/https://msdn.microsoft.com/es-es/office/aa905411.aspxhttps://msdn.microsoft.com/es-es/library/office/ee814737(v=office.14).aspxhttp://void%280%29/http://void%280%29/