You are on page 1of 8

10/9/2015

CreargrficoseinformesdetabladinmicaconVBAenExcel2010

Al usar este sitio acepta el uso de cookies para anlisis, contenido personalizado y publicidad.

Saber ms

Crear grficos e informes de tabla dinmica con VBA


en Excel 2010
Office 2010

Resumen:obtenga informacin acerca de cmo usar Visual Basic para Aplicaciones VBA en Microsoft Excel 2010 con el fin de crear y manipular
grficos e informes de tabla dinmica. El uso de cdigo para crear informes y grficos de tabla dinmica puede ayudarle a realizar estas tareas varias
veces y con mayor eficacia.
ltima modificacin: domingo, 05 de junio de 2011
Hace referencia a: Excel 2010| Office 2010| SharePoint Server 2010| VBA
En este artculo
Informacin general sobre el uso de VBA con grficos e informes de tabla dinmica
Crear un informe de tabla dinmica mediante VBA
Crear un grfico mediante VBA
Realizar cambios en un grfico incrustado
Crear un grfico basado en un informe de tabla dinmica
Conclusin
Recursos adicionales
Se aplica a:Microsoft Excel 2010
Publicado:junio de 2011
Proporcionado por:

Dr. Gerard M. Verschuuren, Mr. Excel en ingls | Mark Roberts, Microsoft Corporation

Contenido
Informacin general sobre el uso de VBA con grficos e informes de tabla dinmica
Crear un informe de tabla dinmica mediante VBA
Crear un grfico mediante VBA
Realizar cambios en un grfico incrustado
Crear un grfico basado en un informe de tabla dinmica
Conclusin
Recursos adicionales

Descargue el libro de ejemplo sobre la creacin de grficos e informes de tabla dinmica con VBA PivotTablesAndCharts.xlsm en ingls

Informacin general sobre el uso de VBA con grficos e informes de tabla dinmica
Si lee este artculo y descarga el libro de ejemplo, podr aprender a crear grficos e informes de tabla dinmica mediante cdigo de Visual Basic para
Aplicaciones VBA. Para ejecutar el cdigo descrito en este artculo con datos de ejemplo, descargue el libro de ejemplo PivotTablesAndCharts en
ingls.

Crear un informe de tabla dinmica mediante VBA


El informe de tabla dinmica creado por la macro del libro de ejemplo CreatePivot del PivotTablesAndCharts se muestra en la figura 1.
Figura 1. Informe de tabla dinmica

https://msdn.microsoft.com/eses/library/office/hh243933(v=office.14).aspx

1/8

10/9/2015

CreargrficoseinformesdetabladinmicaconVBAenExcel2010

Este informe de tabla dinmica se basa en la tabla de datos de la hoja de clculo Employees del libro de ejemplo.
Tal como se muestra en las lneas de cdigo siguiente, la macro CreatePivot activa la hoja de clculo y luego usa el mtodo PivotTableWizard para
iniciar el proceso de creacin del informe de tabla dinmica.
VBA

ActiveWorkbook.Sheets("Employees").Select
Range("A1").Select
SetobjTable=Sheet1.PivotTableWizard

Nota
Si presiona F8 en el editor de cdigo para recorrer cdigo de la macro CreatePivot lnea por lnea, ver que la lnea de cdigo que llama al
mtodo PivotTableWizard agrega una nueva hoja de clculo al libro y luego crea el nuevo informe de tabla dinmica en esa hoja.

El mtodo PivotTableWizard devuelve un objeto de Tabla dinmica, que tiene asociada una coleccin de Campos dinmicos. La macro CreatePivot
contina agregando objetos de Campo dinmico a la coleccin de Campos dinmicos para especificar los siguientes campos de informe de tabla
dinmica.
Un campo de fila llamado DEPT
Un campo de columna llamado LOCATION
Un campo de datos basado en el campo SALARIO que usa la funcin SUM

VBA

SetobjField=objTable.PivotFields("DEPT")
objField.Orientation=xlRowField
SetobjField=objTable.PivotFields("LOCATION")
objField.Orientation=xlColumnField
SetobjField=objTable.PivotFields("SALARY")
objField.Orientation=xlDataField
objField.Function=xlSum
objField.NumberFormat="$#,##0"

Nota
Aunque en este ejemplo solo se usan un campo de fila y un campo de columna, puede agregar otros campos a la coleccin de campos
dinmicos para crear informes de tabla dinmica que tengan varios niveles en cada dimensin.

La macro CreatePivot tambin agrega un campo de pgina para habilitar que el campo GENDER filtre el informe, tal como se muestra en las lneas de
cdigo siguientes.
VBA

SetobjField=objTable.PivotFields("GENDER")
objField.Orientation=xlPageField

https://msdn.microsoft.com/eses/library/office/hh243933(v=office.14).aspx

2/8

10/9/2015

CreargrficoseinformesdetabladinmicaconVBAenExcel2010
A continuacin, la macro CreatePivot muestra el nuevo informe de tabla dinmica en vista previa de impresin.
VBA

ActiveSheet.PrintPreview
Tal como se muestra en las lneas de cdigo siguientes, una vez el usuario ha cerrado la vista previa de impresin, la macro CreatePivot le pregunta si
desea eliminar el nuevo informe de tabla dinmica. La lnea que establece la propiedad DisplayAlerts en False suprime la advertencia integrada de
Microsoft Excel que indica "Pueden existir datos en las hojas seleccionadas para eliminar".
VBA

Application.DisplayAlerts=False
IfMsgBox("DeletethePivotTable?",vbYesNo)=vbYesThen
ActiveSheet.Delete
EndIf
Application.DisplayAlerts=True
En el listado siguiente se muestra todo el cdigo para la macro CreatePivot.
VBA

SubCreatePivot()
'CreatesaPivotTablereportfromthetableonSheet1
'byusingthePivotTableWizardmethodwiththePivotFields
'methodtospecifythefieldsinthePivotTable.
DimobjTableAsPivotTable,objFieldAsPivotField

'Selectthesheetandfirstcellofthetablethatcontainsthedata.
ActiveWorkbook.Sheets("Employees").Select
Range("A1").Select

'CreatethePivotTableobjectbasedontheEmployeedataonSheet1.
SetobjTable=Sheet1.PivotTableWizard

'Specifyrowandcolumnfields.
SetobjField=objTable.PivotFields("DEPT")
objField.Orientation=xlRowField
SetobjField=objTable.PivotFields("LOCATION")
objField.Orientation=xlColumnField

'Specifyadatafieldwithitssummary
'functionandformat.
SetobjField=objTable.PivotFields("SALARY")
objField.Orientation=xlDataField
objField.Function=xlSum
objField.NumberFormat="$#,##0"

'Specifyapagefield.
SetobjField=objTable.PivotFields("GENDER")
objField.Orientation=xlPageField

'PreviewthenewPivotTablereport.
ActiveSheet.PrintPreview

'PrompttheuserwhethertodeletethePivotTable.
Application.DisplayAlerts=False
IfMsgBox("DeletethePivotTable?",vbYesNo)=vbYesThen
ActiveSheet.Delete
EndIf
Application.DisplayAlerts=True
EndSub

Crear un grfico mediante VBA


El grfico creado por la macro CreateChart del libro de ejemplo se muestra en la figura 2.
Figura 2. Grfico de columnas 3D

https://msdn.microsoft.com/eses/library/office/hh243933(v=office.14).aspx

3/8

10/9/2015

CreargrficoseinformesdetabladinmicaconVBAenExcel2010

Este grfico se basa en los datos de la hoja de clculo Table del libro de ejemplo.
Las primeras lneas de la macro CreateChart seleccionan la hoja de clculo Table y luego le piden al usuario que seleccione el rango de datos para
crear el grfico. Si se establece el parmetro Default del mtodo InputBox en Selection.Address y el parmetro Type en 8, se devolver un objeto
Rango con su propiedad Address definida como la referencia del rango seleccionado por el usuario.
VBA

ActiveWorkbook.Sheets("Table").Select
SetobjSelection=_
Application.InputBox(Prompt:="Selectthecolumnsandrowstochart",_
Default:=Selection.Address,_
Type:=8)
Las lneas de cdigo siguientes comprueban si se ha seleccionado ms de una celda y, si no es el caso, le piden al usuario que realice una seleccin
apropiada.
VBA

IfobjSelection.Cells.Count=1Then
MsgBox"Youmustselectatleastoneroworcolumnforthechartrange."
ExitSub
EndIf
Las lneas de cdigo siguientes hacen el trabajo de creacin del grfico. El mtodo Add de la coleccin Charts crea una hoja de grfico nueva y luego
devuelve un objeto Grfico que se asigna a la variable objChart. A continuacin, la instruccin With usa esa variable para especificar el aspecto del
grfico, empezando con el uso del mtodo SetSourceData para especificar el rango de datos seleccionado por el usuario. Tenga en cuenta que la
lnea .Legend.Delete se usa para eliminar la leyenda porque duplica la informacin mostrada en el tercer eje de un grfico de columnas 3D.
VBA

SetobjChart=Charts.Add
WithobjChart
.SetSourceDataobjSelection
.ChartType=xl3DColumn
.LocationxlLocationAsNewSheet
.Legend.Delete
.PlotBy=xlColumns
EndWith

https://msdn.microsoft.com/eses/library/office/hh243933(v=office.14).aspx

4/8

10/9/2015

CreargrficoseinformesdetabladinmicaconVBAenExcel2010
Nota
En este ejemplo se crea un grfico bastante simple. Las propiedades y los mtodos del objeto Grfico son bastante amplios. Lea el tema
Miembros de grfico para obtener informacin acerca de los diferentes mtodos y propiedades que se pueden usar para especificar el aspecto
de un grfico.

Las lneas de cdigo restantes de la macro CreateChart proporcionan algunos ejemplos en los que se pide al usuario que especifique propiedades
adicionales que afecten al aspecto del grfico, as como preguntar al usuario si desea eliminar el grfico. En el listado siguiente se muestra todo el
cdigo de la macro CreateChart.
VBA

SubCreateChart()
'CreateanewchartsheetfromthetableonSheet2
'byusingtheAddmethodoftheChartscollection.
DimobjSelectionAsRange,objChartAsChart

'Selectthesheetthatcontainsthedata.
ActiveWorkbook.Sheets("Table").Select

'Prompttheusertoselecttherangetochart
'andsettheRangeobjecttothespecifiedrange.
SetobjSelection=_
Application.InputBox(Prompt:="Selectthecolumnsandrowstochart",_
Default:=Selection.Address,_
Type:=8)

'Verifywhetheraselectionwasmade.
IfobjSelection.Cells.Count=1Then
MsgBox"Youmustselectatleastoneroworcolumnforthechartrange."
ExitSub
EndIf

'Createanewchartsheetandspecifyitssourcedata
'andappearance.
SetobjChart=Charts.Add
WithobjChart
.ChartType=xl3DColumn
.SetSourceDataobjSelect
.LocationxlLocationAsNewSheet
.Legend.Delete
.PlotBy=xlColumns
EndWith

'Asktheuserwhethertoplotbyrowsinstead.
IfMsgBox("Orplotbyrows?",vbYesNo)=vbYesThen
objChart.PlotBy=xlRows
EndIf

'Prompttheuserforatitle.
objChart.HasTitle=True
objChart.ChartTitle.Text=InputBox("Title?")

'Asktheuserwhethertodeletethechart.
Application.DisplayAlerts=False
IfMsgBox("Deletechart?",vbYesNo)=vbYesThen
ActiveSheet.Delete
EndIf
Application.DisplayAlerts=True
EndSub

Realizar cambios en un grfico incrustado


La macro DynamicChart del libro de ejemplo muestra cmo cambiar el aspecto de un grfico incrustado basado en la seleccin del usuario de filas y
columnas enteras. El aspecto del grfico despus de ejecutar la macro y de seleccionar las columnas de datos North y East se muestra en la figura 3.
Figura 3. Grfico dinmico

https://msdn.microsoft.com/eses/library/office/hh243933(v=office.14).aspx

5/8

10/9/2015

CreargrficoseinformesdetabladinmicaconVBAenExcel2010

Para tener acceso a un grfico dinmico y trabajar con l, debe usar la coleccin ChartObjects del objeto Hoja de clculo en lugar de la coleccin
Charts del objeto Libro que se us en el ejemplo de la seccin anterior de este artculo. Las primeras lneas de cdigo de la macro DynamicChart
muestran cmo hacerlo activando la hoja de clculo que contiene el grfico incrustado y luego definiendo una variable de objeto Grfico como el
primer elemento de la coleccin ChartObjects de esa hoja.
VBA

ActiveWorkbook.Sheets("Table+Chart").Activate
SetobjChart=ActiveSheet.ChartObjects(1).Chart
Las lneas de cdigo siguientes le piden al usuario que seleccione filas o columnas para crear un grfico y, a continuacin, asignan esa seleccin a una
variable de objeto Rango con la misma tcnica que se mostr en la seccin Crear un grfico mediante VBA de este artculo.
Segn la seleccin del usuario, el cdigo determina si se usa la primera fila o la primera columna para las categoras del grfico. Para ello, se compara
el nmero de filas seleccionadas con el nmero de columnas seleccionadas. Si el nmero de filas es mayor, se seleccionarn los valores de la primera
columna como categoras. Si el nmero de columnas es mayor, se seleccionarn como categoras los valores de la primera fila.
VBA

r=objSelection.Rows.Count
c=objSelection.Columns.Count
Ifr>cThen
SetobjCategories=Range(Cells(1,1),Cells(r,1))
Else
SetobjCategories=Range(Cells(1,1),Cells(1,c))
EndIf
Las ltimas lneas de cdigo de la macro DynamicChart usan el mtodo Union para crear un solo rango a partir de la seleccin del usuario y la fila o
columna que el cdigo determina para su uso en las categoras. Por ltimo, el cdigo transmite ese rango al mtodo SetSourceData para actualizar la
visualizacin del grfico.
VBA

SetobjSrcData=Union(objCategories,objSelection)
objChart.SetSourceDataobjSrcData
En el ejemplo de cdigo siguiente se muestra todo el listado de la macro DynamicChart.
VBA

SubDynamicChart()
'AdjuststheembeddedchartonSheet3.
DimobjChartAsChart,objChObjectAsChartObject
DimobjSelectionAsRange,objSrcDataAsRange,objCategoriesAsRange
DimrAsLong,cAsLong

'Activatethesheetthatcontainsthechart.
ActiveWorkbook.Sheets("Table+Chart").Activate

'AccessthechartfromtheChartObjectcollection
'oftheactivesheet.
SetobjChart=ActiveSheet.ChartObjects(1).Chart

'Promptusertoselecttherowsorcolumnstochart
'andsettheRangeobjecttothespecifiedrange.
SetobjSelection=_
Application.InputBox(Prompt:="Selectentirerowsorcolumnstochart",_

https://msdn.microsoft.com/eses/library/office/hh243933(v=office.14).aspx

6/8

10/9/2015

CreargrficoseinformesdetabladinmicaconVBAenExcel2010
Default:=Selection.Address,_
Type:=8)

'Determinewhethertheuserselectedrowsorcolumns,
'andthenuseeitherthefirstroworfirstcolumn
'astherangeforcategories.
r=objSelection.Rows.Count
c=objSelection.Columns.Count
Ifr>cThen
SetobjCategories=Range(Cells(1,1),Cells(r,1))
Else
SetobjCategories=Range(Cells(1,1),Cells(1,c))
EndIf

'Createasinglerangefromtheunionof
'categoriesandselecteddata,andthen
'updatethechart.
SetobjSrcData=Union(objCategories,objSelection)
objChart.SetSourceDataobjSrcData
EndSub

Crear un grfico basado en un informe de tabla dinmica


Tambin puede crear grficos basados en un informe de tabla dinmica 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 seccin Crear un informe de tabla dinmica mediante VBA de este artculo.
Uno de los principales aspectos interesantes es la lnea de cdigo que obtiene acceso al informe de tabla dinmica recin creado a partir de la
coleccin PivotTables de la nueva hoja de clculo.
VBA

SetobjPivot=ActiveSheet.PivotTables(1)
Otro aspecto interesante es la lnea de cdigo que usa la propiedad PivotTable para crear un rango que incluya todo el informe de tabla dinmica
excluyendo los campos de pgina.
VBA

SetobjPivRange=objPivot.TableRange1
Las ltimas lneas de cdigo de la macro CreateChartForPivot usan este rango para especificar los datos de origen y luego especificar el aspecto del
grfico. Tenga en cuenta que, de nuevo, se elimina la leyenda porque duplica la informacin del tercer eje de un grfico de columnas 3D.
VBA

WithobjChart
.SetSourceDataobjPivRange
.ChartType=xl3DColumn
.Legend.Delete
EndWith
En el ejemplo de cdigo siguiente se muestra todo el listado de la macro CreateChartForPivot.
VBA

SubCreateChartForPivot()
'CreatesachartbasedonaPivotTablereport.
DimobjPivotAsPivotTable,objPivotRangeAsRange,objChartAsChart

'CalltheCreatePivotmacrotocreateanewPivotTablereport.
CreatePivot

'DeterminewhethertheuserdeletedthePivotTablereport,
'andifso,exitthemacro.
IfActiveSheet.PivotTables.Count=0ThenExitSub

'AccessthenewPivotTablefromthesheet'sPivotTablescollection.
SetobjPivot=ActiveSheet.PivotTables(1)

https://msdn.microsoft.com/eses/library/office/hh243933(v=office.14).aspx

7/8

10/9/2015

CreargrficoseinformesdetabladinmicaconVBAenExcel2010
'Addanewchartsheet.
SetobjChart=Charts.Add

'CreateaRangeobjectthatcontains
'allofthePivotTabledata,exceptthepagefields.
SetobjPivotRange=objPivot.TableRange1

'SpecifythePivotTabledataasthechart'ssourcedata.
WithobjChart
.SetSourceDataobjPivotRange
.ChartType=xl3DColumn
.Legend.Delete
EndWith
EndSub

Conclusin
En este artculo y en el libro de ejemplo PivotTablesAndCharts se ofrecen ejemplos de creacin de grficos e informes de tabla dinmica mediante
cdigo de VBA en Excel.

Recursos adicionales
Introduccin a VBA en Excel 2010
Centro de desarrolladores de Excel
Centro de desarrolladores de Office

2015 Microsoft

https://msdn.microsoft.com/eses/library/office/hh243933(v=office.14).aspx

8/8

You might also like