Site hosted by Angelfire.com: Build your free website today!

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

      Loop

       

      Do Until .ColumnAxis.FieldSets.Count = 0

         Set pFieldset = .ColumnAxis.FieldSets(0)

         .ColumnAxis.RemoveFieldSet pFieldset

      Loop

       

      Do Until .FilterAxis.FieldSets.Count = 0

         Set pFieldset = .FilterAxis.FieldSets(0)

         .FilterAxis.RemoveFieldSet pFieldset

      Loop

 

      Do Until .DataAxis.Totals.Count = 0

         .DataAxis.RemoveTotal .DataAxis.Totals(0)

      Loop

   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

Haga clic aquí para aumentar la imagen

Figura 7. Informe de tabla dinámica con conjuntos de campos y totales

 

 

 

 

 

Continuación…