Programación de informes de tabla dinámica en Microsoft Access
2002
Keith Fink, Frank C. Rice
Microsoft Corporation
Octubre
de 2002
Este
artículo se aplica a:
Microsoft® Access 2002
Resumen: en este artículo se analizan los elementos de un informe
de tabla dinámica y el modo de manipular y crear mediante programación informes
de tabla dinámica en Microsoft Access 2002. Asimismo, se examinará el modelo de
eventos para dichos informes.
Introducción
Los informes
de tabla dinámica constituyen un tipo de tabla utilizada en aplicaciones de
Microsoft Office como, por ejemplo, Microsoft Excel y Microsoft Access cuyo
objetivo consiste en sintetizar la información de los campos seleccionados en
un origen de datos. Mediante el uso del informe de tabla dinámica, el diseño de
la tabla se puede modificar dinámicamente para poder ver y analizar los datos
de diferentes maneras. Por ejemplo, los encabezados de fila y de columna, así
como los campos de filtro se pueden reorganizar hasta que se obtenga el diseño
deseado. Cada vez que se modifique el diseño, la tabla actualiza los datos de
forma inmediata en función de la nueva organización.
En Access,
los informes de tabla dinámica se pueden crear y manipular a través de la
interfaz de usuario, o bien, mediante programación con un modelo de objetos con
Visual Basic® for Applications
(VBA). Asimismo, existe un modelo de eventos que activa eventos específicos en
Access a medida que se interactúa con los informes de tabla dinámica.
En primer
lugar, se analizarán los distintos elementos que conforman un informe de tabla
dinámica. Posteriormente, se examinará el modelo de objetos de tabla dinámica
en Access 2002. A continuación, se mostrará cómo se puede hacer referencia a
los informes de tabla dinámica incluidos en formularios y se describirán los
distintos objetos y colecciones que se pueden manipular. Finalmente, también se
describirán los eventos asociados con un informe de tabla dinámica y se
presentarán ejemplos de código donde se mostrarán algunos de los eventos.
Elementos del informe
de tabla dinámica
Antes de
conocer el modo de crear y manipular los informes de tabla dinámica mediante
programación, se deben comprender los distintos elementos y áreas que
constituyen un informe de este tipo. Para esta explicación, mencionaremos la
existencia de dos elementos principales de un informe de tabla dinámica: los
miembros Ejes y Lista de campos.
Ejes
Un eje es un
área de la ventana de tabla dinámica que puede incluir uno o varios campos de
datos. En la interfaz de usuario, los ejes también se denominan áreas de
colocación, ya que los campos se pueden arrastrar y colocar en las mismas.
En los
informes de tabla dinámica existen cuatro ejes principales. Cada uno de ellos
tiene un propósito diferente. La siguiente figura muestra el diseño de un
informe de tabla dinámica en blanco en Access 2002.
Figura 1. Zonas de colocación del informe de tabla dinámica
Existen cuatro ejes principales: campos
de fila, campos de columna, campos de filtro y campos de
detalle o totales.
El eje de campos
de fila define qué campos se deben incluir en la parte izquierda del
informe de tabla dinámica; es muy similar al campo de encabezados de fila
de una consulta de tabla de referencias cruzadas.
El eje de campos
de columna define qué campos se deben incluir a lo largo de la parte
superior del informe de tabla dinámica; es muy similar al campo de encabezados
de columna de una consulta de tabla de referencias cruzadas.
Nota: Las consultas de tabla de referencias
cruzadas se pueden utilizar para calcular y reestructurar los datos de modo que
el análisis de la información resulte más sencillo. Estas consultas calculan la
suma, el promedio, la cuenta u otro tipo de total para los datos agrupados por
dos tipos de información: la que se encuentra en la parte inferior izquierda de
la hoja de datos y la situada a lo largo de la parte de la parte superior. Las
consultas de tabla de referencias cruzadas no se pueden dotar de un carácter
dinámico.
El eje de campos de filtro
define los campos que se pueden utilizar para filtrar el informe de tabla
dinámica sin tener que mostrarlo en otro eje. Por ejemplo, puede que se desee
filtrar los datos mediante el campo Forma de envío y no mostrar dicho campo en
el informe de tabla dinámica.
El eje de los campos de detalle o
totales define los campos que se deben mostrar en la intersección de cada
fila y columna. Es muy similar al campo de valor de una consulta de
tabla de referencias cruzadas. En la siguiente tabla se indican las propiedades
que se utilizan para tener acceso a cada uno de los ejes.
Eje |
Propiedad |
Campos de
fila |
RowAxis |
Campos de
columna |
ColumnAxis |
Campos de
detalle o totales |
DataAxis |
Campos de
filtro |
FilterAxis |
Lista de campos
La lista de
campos de tabla dinámica dispone de la misma funcionalidad que una lista de
campos que se pueda utilizar en una consulta o formulario. Se utiliza para
mostrar los campos que se encuentran disponibles para su uso en un informe de
tabla dinámica en función de la propiedad RecordSource
(OrigenDelRegistro) del formulario. Sin embargo,
en la lista de campos de tabla dinámica existen ciertas diferencias que resulta
importante comprender. En la siguiente figura se muestra un
lista de campos típica para un objeto en la vista Tabla dinámica.
Figura 2. Lista de campos de tabla dinámica
La lista de
campos dispone de tres elementos principales: Conjunto de campos (Fieldsets), Campos (Fields)
y Totales (Totals).
Conjunto de campos
Se debe tener
en cuenta que la lista de campos muestra nodos expansibles que representan
todos los campos disponibles en el formulario. Cuando se expande un nodo, los
miembros se hacen visibles. Por ejemplo, el nodo Fecha de pedido por mes (Order Date by Month) se puede
expandir para mostrar un número de miembros como, por ejemplo, Años (Years), Trimestres (Quarters),
Meses (Months), etc. Asimismo, se debe tener
en cuenta que el nodo Apellidos (LastName) se
expande para mostrar únicamente un solo miembro: LastName.
El nodo de
nivel superior se denomina Fieldset (Conjunto
de campo). Un conjunto de campos puede incluir uno o varios miembros. En la
mayoría de los casos, los conjuntos de campos contienen solamente un miembro
tal y como se muestra en el campo de apellidos. Para un formulario de la vista
Tabla dinámica, la lista de campos contiene un conjunto de campos para cada
campo que se haya situado en el formulario en la vista Diseño. Para las tablas
y las consultas de la vista de tabla dinámica, la lista de campos incluye los
campos disponibles en dichas tablas o consultas.
Todos los
conjuntos de campos contienen al menos un miembro que representa al campo real
de la tabla o consulta base. Si los campos de fecha y hora se encuentran
disponibles, habrá conjuntos de campo adicionales que incluyan varios miembros,
lo que permite que se produzca la agrupación en función de una parte
determinada de la fecha.
Campos
Los campos
son los miembros inferiores de un conjunto de campos. Por ejemplo, el conjunto
de campo de apellidos contiene un campo: Apellidos (LasName).
El conjunto Fecha de pedido por mes (Order Date by
Month) incluye siete campos; cada uno de ellos
representa una parte diferente del tiempo que se puede agrupar. En realidad
estos campos representan al objeto que se agregará mediante programación al
informe de tabla dinámica.
Totales
Se debe tener
en cuenta que existe un nodo Totals
(Totales) situado junto a la parte superior de la lista de campos. Este
nodo se puede expandir para mostrar todas las funciones agregadas o los
cálculos que implican esta clase de funciones que se hayan creado en el informe
de tabla dinámica. En este informe de tabla dinámica concreto, el usuario sólo
ha creado un campo de total: Suma de cargo (Sum of Freight).
Todas las
funciones agregadas que haya creado el usuario como, por ejemplo, Suma (Sum), Promedio (Average), Mínimo (Min), Máximo (Max) y Desviación
estándar (Standard Deviation), se mostrarán bajo
el nodo de totales.
Modelo de objetos de tabla dinámica
En las
siguientes secciones se analizará el modelo de objetos de tabla dinámica en
Access 2002. Asimismo, se estudiará cómo se puede hacer referencia a los
informes de tabla dinámica incluidos en los formularios.
Propiedad PivotTable (Tabla dinámica)
Para tener
acceso al objeto PivotTable expuesto por un
formulario, se debe utilizar la propiedad PivotTable.
Es el nivel superior del modelo de objetos de tabla dinámica. Se trata de la
interfaz con la que se tiene acceso a todas las colecciones, objetos, métodos y
propiedades del informe de tabla dinámica. En el siguiente ejemplo se hace
referencia a la propiedad PivotTable de un
formulario y la propiedad BackColor (ColorDelFondo) del informe de tabla dinámica se
establece en el color rojo.
'Requiere una referencia a Microsoft Office
Web Components 10.0
'biblioteca:
OWC10.dll
Dim pTable as
OWC10.PivotTable
Set pTable = Forms("Invoices").PivotTable
pTable.BackColor = 255
Para ver una
lista de todas las propiedades y métodos asociados con el objeto de tabla
dinámica, consulte el apéndice incluido al final del artículo.
Objeto ActiveView (PresentActiva)
La propiedad ActiveView representa el diseño del informe de tabla
dinámica. Es el objeto principal que se utilizará en la creación y manipulación
de los informes de tabla dinámica. Al establecer una variable en la vista
activa del informe de tabla dinámica, se proporciona un método adecuado para
realizar cambios en su diseño.
En el
siguiente ejemplo se indica cómo se utiliza la propiedad ActiveView
para tener acceso a FilterAxis en un informe
de tabla dinámica. En este caso, se establecerá la propiedad Caption (Título) de FilterAxis
en una cadena personalizada.
'Requiere una
referencia a OWC10.dll
Dim pTableView As
OWC10.PivotView
Set pTableView = Forms("Invoices").PivotTable.ActiveView
pTableView.FilterAxis.Label.Caption = _
"Please
insert your Filtering Fields here!"
Colecciones del
informe de tabla dinámica
En las
siguientes secciones se estudiarán algunas colecciones asociadas con los
informes de tabla dinámica, así como las distintas formas de manipulación de
estos informes mediante programación con el uso de los objetos de estas
colecciones.
Colecciones Fields (campos) y Fieldsets (conjuntos de campos)
La colección Fieldsets del objeto ActiveView
es una colección de objetos Fieldset. Cada
objeto Fieldset representa un nodo de nivel
superior en la lista de campos. Todos los objetos Fieldset
contienen una colección Fields que, a su vez,
incluye objetos PivotField. Cada uno de los
objetos PivotField representa un campo de
detalles en Fieldset. Por ejemplo, la
colección Fields del conjunto de campo Last Name de la figura
2 contiene únicamente un campo dinámico, LastName.
La colección Fields de FieldSet
del campo Order Date by Month
de la figura 2 incluye siete objetos PivotField
(Years, Quarters, Months, etc.).
El siguiente
código ejecuta la enumeración de todas las colecciones FieldSet
en el objeto ActiveView del informe de tabla
dinámica, imprime el nombre de FieldSet y, a
continuación, el número de objetos PivotField
de la colección Fields.
Sub EnumerateFieldsets()
'Requiere una referencia a OWC10.Dll
Dim pTable As OWC10.PivotTable
Dim pTableView As OWC10.PivotView
Dim pFieldset As OWC10.PivotFieldSet
Dim pField As OWC10.PivotField
DoCmd.OpenForm "Invoices", acFormPivotTable
Set pTable = Forms("Invoices").PivotTable
Set pTableView = pTable.ActiveView
'Recorrer cada Fieldset en la lista de campos
'e imprimir su
nombre.
For Each pFieldset In pTableView.FieldSets
Debug.Print "The '" & pFieldset.Name
& _
"'
FieldSet contains " &
_
pFieldset.Fields.Count & " field(s):"
'Recorrer cada
objeto PivotField en la colección Fields
'e imprimir su
nombre.
For Each pField In pFieldset.Fields
Debug.Print vbTab & pField.Name
Next
Debug.Print
Next
End Sub
Output
=======
The 'OrderID' FieldSet contains 1 field(s):
OrderID
The 'CustomerID' FieldSet contains 1 field(s):
CustomerID
The 'EmployeeID' FieldSet contains 1 field(s):
EmployeeID
The 'OrderDate' FieldSet contains 1 field(s):
OrderDate
The 'OrderDate By Week' FieldSet contains 6
field(s):
Years
Weeks
Days
Hours
Minutes
Seconds
...
Adición
de campos calculados a la lista de campos
En ocasiones
resulta necesario agregar campos calculados a la lista de campos. Esta
operación se puede realizar utilizando los métodos AddFieldSet
y AddCalculatedField. En primer lugar, se debe
crear un objeto Fieldset mediante el método AddFieldSet. Este nuevo objeto no incluirá ningún
campo, por lo que se debe utilizar el método AddCalculatedField
para agregar un campo calculado a Fieldset.
El método AddFieldSet es bastante sencillo. Sólo acepta un
argumento: el nombre del nuevo objeto Fieldset que se
va a crear. Sin embargo, el método AddCalculatedField
presenta una mayor complejidad. Dicho método acepta varios argumentos: Nombre
(Name), Título (Caption),
Campo de datos (Data Field) y Expresión (Expression). El argumento Name
representa el nombre del nuevo campo calculado en la colección Fields. Caption
representa el modo en que se mostrará el campo en la lista de campos; de forma
similar a la propiedad Caption de una tabla. Data
Field es el nombre del campo que se creará en
el objeto subyacente Data Object (ADO) Recordset de ActiveX®
del informe de tabla dinámica. Finalmente, el argumento Expression
representa la expresión real que se debe calcular.
En el
siguiente ejemplo se crea un nuevo objeto Fieldset
denominado Price. A continuación, éste crea un campo
calculado llamado CalculatedPrice, con una expresión de UnitPrice*Quantity*(1-Discount).
Sub AddCalculatedFieldset()
'Requiere una referencia
a OWC10.Dll
Dim pTable As OWC10.PivotTable
Dim pTableView As OWC10.PivotView
Dim pFieldset As OWC10.PivotFieldSet
Dim pField As OWC10.PivotField
DoCmd.OpenForm "Invoices", acFormPivotTable
Set pTable = Forms("Invoices").PivotTable
Set pTableView = pTable.ActiveView
On Error GoTo AddCalculatedFieldset_Err
Set pFieldset = pTableView.FieldSets("Price")
pFieldset.DisplayInFieldList = True
Set pField = _
pFieldset.AddCalculatedField("CalculatedPrice", _
"Calculated
Price", "calcPrice", _
"UnitPrice*Quantity*(1-Discount)")
AddCalculatedFieldset_Exit:
Exit Sub
AddCalculatedFieldset_Err:
Select Case Err.Number
Case 9 'Subscript out of
range
Set pFieldset = pTableView.AddFieldSet("Price")
Resume
Case -2147467259 'El campo ya existe en el conjunto de campos
Resume Next
End Select
End Sub
Figura 3. Lista de campos con conjunto
de campos calculados
Borrado
de un informe de tabla dinámica
Existen
varios métodos para borrar informes de tabla dinámica. El enfoque más sencillo
es restablecer la propiedad RecordSource (OrigenDelRegistro) del formulario. Esto hace que Access
elimine automáticamente todos los objetos Fieldsets
de todos los ejes del informe de tabla dinámica, así como todos los totales o
campos calculados de la lista de campos. Asimismo, se restablecerán todos los
formatos personalizados que se hayan realizado, por lo que este método se debe
utilizar con cuidado. Este fragmento de código establece la propiedad RecordSource del formulario a sí misma, lo que
mantiene al formulario enlazado a los mismos datos; sin embargo, restablece las
vistas de tabla dinámica completamente.
...
Me.RecordSource = Me.RecordSource
...
En ciertas
situaciones, puede resultar adecuado eliminar objetos Fieldsets
de los ejes de tabla dinámica mientras se mantiene el formato personalizado,
los totales y los campos calculados. En el siguiente ejemplo de código se
eliminan todos los objetos Fieldset de cada uno de
los ejes, así como todos los objetos Total del eje Data. Sin
embargo, no se eliminan el formato personalizado ni los elementos de la lista
de campos.
Sub RemoveFieldsetsAndTotals()
Dim pView As OWC10.PivotView
Dim pFieldset As OWC10.PivotFieldSet
DoCmd.OpenForm "Invoices", acFormPivotTable
Set pView = Forms("Invoices").PivotTable.ActiveView
With pView
Do Until .RowAxis.FieldSets.Count = 0
Set pFieldset = .RowAxis.FieldSets(0)
.RowAxis.RemoveFieldSet pFieldset
Do Until .ColumnAxis.FieldSets.Count = 0
Set pFieldset = .ColumnAxis.FieldSets(0)
.ColumnAxis.RemoveFieldSet pFieldset
Do Until .FilterAxis.FieldSets.Count = 0
Set pFieldset = .FilterAxis.FieldSets(0)
.FilterAxis.RemoveFieldSet pFieldset
Do Until .DataAxis.Totals.Count = 0
.DataAxis.RemoveTotal .DataAxis.Totals(0)
End With
End Sub
Los objetos PivotTotal y la colección Totals
La colección Totals del objeto ActiveView
contiene objetos PivotTotal. Cada uno de estos
objetos representa una función agregada o un total calculado. Una función
agregada es un cómputo con el que se calculan algunos resultados para un campo
a través de todos los registros; es muy similar a las funciones agregadas en
las consultas de Access. Ejemplos de funciones agregadas: Sumar (Sum), Contar (Count), Mínimo
(Min), Máximo (Max).
Supongamos
que se han agregado dos objetos PivotTotal a
la lista de campos. FreightTotal es el nombre de un objeto PivotTotal que efectúa una suma del campo Freight. OrderCount es el nombre de un objeto PivotTotal
que realiza una cuenta del campo OrderID.
Un total
calculado es una expresión que utiliza los resultados de otras funciones
agregadas en la colección Totals. Para
continuar con el ejemplo anterior, se indica un total calculado:
FreightAverage: FreightTotal / OrderCount
Este total
utiliza los resultados de las funciones agregadas FreightTotal y OrderCount en su expresión para calcular un
promedio. Este ejemplo sirve para ilustrar la operación. Es obvio que para
comenzar podría haber resultado mucho más sencillo utilizar la función agregada
Promedio.
El método que
se utiliza para crear el objeto PivotTotal
depende del tipo de objeto PivotTotal que
desee obtener.
Adición
de objetos Pivot Total agregados a la lista de campos
Para agregar
un objeto PivotTotal a la lista de campos, en
primer lugar el objeto se debe crear y agregar a la colección Totals. Para realizar esta operación, emplee el
método AddTotal. Este método necesita tres
argumentos: el nombre del nuevo objeto PivotTotal,
una referencia a un objeto PivotField en un
objeto Fieldset existente y una constante que
determine qué función agregada concreta se debe llevar a cabo. Una vez que el
objeto PivotTotal se haya agregado a la
colección Totals, se mostrará bajo el nodo Totals de la lista de campos. En el siguiente
ejemplo de código se crean dos totales: una suma del campo Freight denominada FreightTotal y una cuenta del campo OrderID
llamada OrderCount.
Sub AddAggregatePivotTotals()
'Requiere una referencia
a OWC10.dll
Dim pTable As OWC10.PivotTable
Dim pTableView As OWC10.PivotView
Dim pField As OWC10.PivotField
On Error GoTo AddAggregatePivotTotals_Err
DoCmd.OpenForm "Invoices", acFormPivotTable
Set pTable = Forms("Invoices").PivotTable
Set pTableView = pTable.ActiveView
With pTableView
Set pField = _
.FieldSets("Price").Fields("CalculatedPrice")
.AddTotal "PriceTotal", pField, plFunctionSum
Set pField = .FieldSets("OrderID").Fields("OrderID")
.AddTotal "OrderCount", pField, plFunctionCount
End With
Exit Sub
AddAggregatePivotTotals_Err:
If Err.Number = 9 Then
AddCalculatedFieldset
Resume
End If
End Sub
Figura 4. Lista de campos con totales dinámicos?
agregados
Incorporación
de totales dinámicos calculados a la lista de campos
Para agregar
un objeto PivotTotal calculado a la lista de
campos, en primer lugar dicho objeto se debe crear y agregar a la colección Totals. Para realizar esta operación, emplee el
método AddCalculatedTotal. Este método
requiere de tres argumentos: el nombre del nuevo objeto PivotTotal,
el título que se mostrará en la lista de campos y la expresión real que se vaya
a calcular.
En el siguiente
ejemplo se crea un objeto PivotTotal calculado
denominado FreightAverage que divide el objeto PivotTotal de FreightTotal entre el objeto PivotTotal de OrderCount para calcular un promedio. Esto hace
que el objeto PivotTotal calculado se muestre
en la lista de campos.
Sub AddCalculatedPivotTotal()
'Requiere una referencia a OWC10.Dll
'NOTA: con este procedimiento se asume que
ya se ha ejecutado
'el procedimiento AddAggregatePivotTotals() anterior.
Dim pTable As OWC10.PivotTable
Dim pTableView As OWC10.PivotView
Dim pField As OWC10.PivotField
Dim pTotal As OWC10.PivotTotal
On Error GoTo AddCalculatedPivotTotal_Err
DoCmd.OpenForm "Invoices", acFormPivotTable
Set pTable = Forms("Invoices").PivotTable
Set pTableView = pTable.ActiveView
Set pTotal = pTableView.Totals("PriceTotal")
pTableView.AddCalculatedTotal "PriceAverage",
_
"Price Average", "[PriceTotal]
/ [OrderCount]"
Exit Sub
AddCalculatedPivotTotal_Err:
If Err.Number = 9 Then
AddAggregatePivotTotals
Resume
End If
End Sub
Figura 5. Lista de campos con el total dinámico calculado
Incorporación
de colecciones de conjuntos de campos (Fieldsets) y
totales (Totals) a los ejes de tabla dinámica
Hasta el
momento se ha analizado el modo de funcionamiento de las colecciones Fieldsets y Totals,
cómo crear nuevos objetos PivotTotal y el modo
de agregarlos a la lista de campos. En esta sección se mostrará cómo tomar los
objetos de la lista de campos y situarlos en el informe de tabla dinámica. Una
vez que ha quedado claro cómo hacer referencia a los objetos en las colecciones
Fieldsets y Totals,
la incorporación de las mismas al informe de tabla dinámica resulta un proceso
bastante sencillo.
Incorporación
de objetos Fieldsets a los ejes de tabla dinámica
La primera
operación que se debe realizar antes de insertar un objeto Fieldset
consiste en designar el eje que debe contener dicho objeto. Para realizar esta
operación, se debe hacer referencia a la propiedad del eje adecuada del objeto ActiveView. Las propiedades válidas del eje se
incluyen en la sección Elementos del informe de tabla dinámica. A
continuación, se debe utilizar el método InsertFieldSet
para agregar Fieldset al eje.
Sub AddFieldsetsToPivotTable()
Dim pTable As OWC10.PivotTable
Dim pTableView As OWC10.PivotView
Dim pAxis As OWC10.PivotAxis
Dim pField As OWC10.PivotField
Dim pFieldSet As OWC10.PivotFieldSet
DoCmd.OpenForm "Invoices", acFormPivotTable
Set pTable = Forms("Invoices").PivotTable
Set pTableView = pTable.ActiveView
'Se desea agregar SalesPerson
(Vendedor al área) de colocación de los campos de filas,
'por lo que se hace referencia a la
propiedad RowAxis
Set pAxis = pTableView.RowAxis
'Usar el método InsertFieldset
y hacer referencia al
'objeto Fieldset
que se desea agregar a este eje
Set pFieldSet = pTableView.FieldSets("SalesPerson")
pAxis.InsertFieldSet pFieldSet
pFieldSet.Fields("SalesPerson").IsIncluded =
True
'Se desea
agregar CompanyName al área de colocación
'de campos de columna, por lo que se hace
referencia a la propiedad ColumnAxis
Set pAxis = pTableView.ColumnAxis
'Usar el método InsertFieldset
y hacer referencia al
'objeto Fieldset
que se desea agregar a este eje
Set pFieldSet = _
pTableView.FieldSets("OrderDate By Month")
For Each pField In pFieldSet.Fields
pField.IsIncluded = False
Next
pFieldSet.Fields("Years").IsIncluded = True
pAxis.InsertFieldSet pFieldSet
'Se desea agregar ShipCountry
(PaísDestinatario) al área de colocación
'de filtro, por lo que se hace referencia a
la propiedad FilterAxis
Set pAxis = pTableView.FilterAxis
Set pFieldSet = pTableView.FieldSets("ShipCountry")
pAxis.InsertFieldSet pFieldSet
End Sub
Figura 6. Informe de
tabla dinámica con conjuntos de campos agregados a los ejes
Incorporación
de totales a los ejes de tabla dinámica
El proceso
para insertar un objeto PivotTotal en un eje
de tabla dinámica es muy similar a la adición de un objeto Fieldset
a un eje. Se debe hacer referencia a la propiedad DataAxis
del objeto ActiveView, ya que este área de colocación es la única que puede incluir
totales. Posteriormente, se emplea el método InsertTotal
para agregar el objeto PivotTotal al eje. De
forma opcional, puede que se desee utilizar el método HideDetails
de modo que los datos del resumen de muestren de forma predeterminada.
Sub AddTotalsToPivotTable()
'Requiere una referencia a OWC10.dll
Dim pTable As OWC10.PivotTable
Dim pTableView As OWC10.PivotView
Dim pDataAxis As OWC10.PivotDataAxis
DoCmd.OpenForm "Invoices", acFormPivotTable
Set pTable = Forms("Invoices").PivotTable
Set pTableView = pTable.ActiveView
'Hacer
referencia a la propiedad DataAxis
Set pDataAxis = pTableView.DataAxis
On Error GoTo AddTotalsToPivotTable_Err
'Utilizar el
método InsertTotal para agregar cada total
pDataAxis.InsertTotal pTableView.Totals("PriceTotal")
pDataAxis.InsertTotal pTableView.Totals("OrderCount")
pDataAxis.InsertTotal pTableView.Totals("PriceAverage")
'Dar formato a
los totales apropiados como Moneda
pDataAxis.Totals("PriceTotal").NumberFormat
= _
"Currency"
pDataAxis.Totals("PriceAverage").NumberFormat
= _
"Currency"
'Ocultar los
datos de detalle o, de lo contrario, el usuario verá el mensaje
'"No Details"
(Sin detalles) en la tabla dinámica
pTable.ActiveData.HideDetails
Exit Sub
AddTotalsToPivotTable_Err:
If Err.Number = 9 Then
AddCalculatedPivotTotal
Resume
End If
End Sub
Figura 7. Informe de tabla dinámica con conjuntos de campos y
totales