Programar las vistas Tabla dinámica y Gráfico dinámico en Access 2002

Se aplica a
Microsoft Office Access 2003
Microsoft Access 2002

Los formularios y hojas de datos de Microsoft Access 2002 admiten dos vistas nuevas: la vista PivotTable® y la vista PivotChart®. La vista Tabla dinámica utiliza el componente de tabla dinámica de Office y facilita el análisis de datos interactivos. La vista Gráfico dinámico utiliza el componente de gráfico de Office y ayuda a crear gráficos dinámicos e interactivos. Las vistas admiten interacciones, como agregar, filtrar y ordenar datos, sin necesidad de escribir código. Sin embargo, si desea generar una vista en tiempo de ejecución según datos facilitados por el usuario, es preciso escribir código. En este artículo se recoge código de ejemplo para realizar tareas sencillas, como mover y filtrar campos, en las vistas Tabla dinámica y Gráfico dinámico.

Si desea obtener más información sobre cómo agregar código a un formulario, consulte la Ayuda de Access.

 Nota   Los siguientes ejemplos están basados en la base de datos de ejemplo Importadores Neptuno incluida en Access.

Incluir una referencia a la biblioteca de Office Web Components    

Para que funcione el siguiente código, la base de datos debe incluir una referencia a Owc11.dll (para Access 2003) u Owc10.dll (para Access 2002). Las bases de datos creadas con Access 2000 o anterior, o las creadas con Access 2002 pero guardadas con formato de archivo de Access 2000 y posterior, no incluyen la referencia.

Para agregar a una base de datos de Access una referencia a Owc11.dll u Owc10.dll    

  1. Abra la base de datos a la que desee agregar la referencia.
  2. Haga clic en Código de la barra de herramientas para abrir el editor de Microsoft Visual Basic®.
  3. En el menú Herramientas, haga clic en Referencias.
  4. Haga clic en Examinar y vaya a la ubicación del archivo Owc11.dll u Owc10.dll.

Para Access 2003, la ubicación predeterminada es C:/Archivos de programa/Common Files/Microsoft Shared/Web Components/11; para Access 2002, C:/Archivos de programa/Common Files/Microsoft Shared/Web Components/10.

  1. Seleccione el archivo y haga clic en Abrir.

Ejemplos de la vista Tabla dinámica

MostrarAgregar campos a las áreas de fila, columna y detalle

MostrarAgregar campos a las áreas de fila, columna y detalle

El siguiente código agrega los campos Id. de cliente, Forma de envío y Puesto a las áreas de fila, columna y detalle de la vista Tabla dinámica de un formulario basado en la tabla Pedidos.

Dim fset1, fset2, fset3 As PivotFieldSetSet fset1 = Me.PivotTable.ActiveView.FieldSets("CustomerID") Set fset2 = Me.PivotTable.ActiveView.FieldSets("ShipVia") Set fset3 = Me.PivotTable.ActiveView.FieldSets("Freight")Me.PivotTable.ActiveView.RowAxis.InsertFieldSet fset1 Me.PivotTable.ActiveView.ColumnAxis.InsertFieldSet fset2 Me.PivotTable.ActiveView.DataAxis.InsertFieldSet fset3

MostrarAgregar un campo de totales

El siguiente código crea un campo de totales que cuenta el número de Id. de cliente, y agrega el campo al área de detalle de la vista.

Me.PivotTable.ActiveView.AddTotal "Count Of Customers", _    Me.PivotTable.ActiveView.FieldSets("CustomerID").Fields("CustomerID"), _    plFunctionCountMe.PivotTable.ActiveView.DataAxis.InsertTotal _    Me.PivotTable.ActiveView.Totals("Count Of Customers")

MostrarAgregar un campo calculado de totales

El siguiente código crea un campo de totales que calcula un 7% del valor de cargo, y agrega el campo al área de detalle de la vista. El argumento Expression aceptará cualquier expresión válida del motor de base de datos de Microsoft Jet con las funciones 'seguras' de Visual Basic para Aplicaciones (VBA).

Me.PivotTable.ActiveView.AddCalculatedTotal "FTax", "Freight Tax", "[Freight] * 0.07"

Me.PivotTable.ActiveView.DataAxis.InsertTotal Me.PivotTable.ActiveView.Totals("FTax")

 Nota   Si intenta ejecutar este código más de una vez, se generará un mensaje de error.

MostrarQuitar todos los campos de la vista

El siguiente código borra todos los campos y totales de la vista Tabla dinámica, dejándola en blanco. La idea básica consiste en ejecutar un bucle en los diversos ejes y quitar todos los totales y campos.

 Nota   Este código de ejemplo no quita el formato aplicado a los campos y totales.

Dim ptable As PivotTable Set ptable = Me.PivotTable With ptable.ActiveView    Do While .RowAxis.FieldSets.Count > 0        .RowAxis.RemoveFieldSet 0    Loop    Do While .ColumnAxis.FieldSets.Count > 0        .ColumnAxis.RemoveFieldSet 0    Loop    Do While .FilterAxis.FieldSets.Count > 0        .FilterAxis.RemoveFieldSet (0)    Loop    Do While .DataAxis.FieldSets.Count > 0        .DataAxis.RemoveFieldSet (0)    Loop    Do While .DataAxis.Totals.Count > 0        .DataAxis.RemoveTotal (0)    Loop End With

MostrarFiltrar un campo de fila

MostrarFiltrar un campo de fila

El siguiente código filtra el campo Id. de cliente, que está en el área de fila. Pase a la vista un rango de valores que desee ver utilizando la propiedad IncludedMember.

Agregue este código al evento Form_DblClick(Cancel As Integer). Para ejecutar este código, haga doble clic en el formulario después de abrirlo.

Dim arrFilter As VariantarrFilter = Array("ALFKI", "BLAUS", "CHOPS", "EASTC")Me.PivotTable.ActiveView.RowAxis.FieldSets("CustomerID") _    .Fields("CustomerID").IncludedMembers = arrFilter

MostrarEspecificar orden personalizado de un campo

El siguiente código ordena los elemento del campo de fila según el orden personalizado que se define. Para crear el orden, especifique el orden y la dirección en la que desee ordenar los elementos.

Agregue este código al evento Form_DblClick(Cancel As Integer). Para ejecutar este código, haga doble clic en el formulario después de abrirlo.

Dim arrSort As VariantarrSort = Array("Vice President, Sales", "Sales Manager", _              "Sales Representative", "Inside Sales Coordinator")Me.PivotTable.ActiveView.RowAxis.FieldSets("Title").Fields("Title") _              .OrderedMembers = arrSortMe.PivotTable.ActiveView.RowAxis.FieldSets("Title").Fields("Title") _              .SortDirection = plSortDirectionCustom

MostrarCambiar el color de fondo y estilo de fuente de las celdas que muestran subtotales

MostrarCambiar el color de fondo y estilo de fuente de las celdas que muestran subtotales

El siguiente código da formato a los subtotales en una vista. Utilice la referencia al campo al que pertenece el subtotal y, a continuación, ajuste las propiedades del subtotal en consecuencia.

Me.PivotTable.ActiveView.rowaxis.FieldSets(0).Fields(0).SubtotalBackColor = "Red"

Me.PivotTable.ActiveView.rowaxis.FieldSets(0).Fields(0).SubtotalFont.Bold = True

MostrarCambiar el color de fondo y el formato de número de un campo de detalle

El siguiente código da formato a los campos del área de detalle. La primera línea establece el color de fondo del primer campo de detalle en la vista, y la segunda línea establece un formato de número personalizado para el campo.

Me.PivotTable.Activeview.DataAxis.FieldSets(0).Fields(0).DetailBackColor = "Green"

Me.PivotTable.ActiveView.DataAxis.FieldSets(0).Fields(0).NumberFormat = "$#,##0.00"

 Nota   Es preciso ejecutar el código para establecer el formato de número de un campo en la vista Tabla dinámica cada vez que se abre el objeto en la vista.

MostrarMostrar u ocultar elementos

MostrarMostrar u ocultar elementos

El siguiente código oculta y muestra los detalles de todos los elementos en la vista.

Me.PivotTable.ActiveData.HideDetails

Me.PivotTable.ActiveData.ShowDetails

Si desea mostrar u ocultar los detalles de un subconjunto de datos en la vista, utilice los métodos ShowDetails y HideDetails en el objeto ChildRowMembers. El siguiente código muestra y oculta los detalles del octavo elemento en el área de fila.

Me.PivotTable.ActiveData.RowAxis.RowMember _       .ChildRowMembers(7).ShowDetails
Me.PivotTable.ActiveData.RowAxis.RowMember _       .ChildRowMembers(7).HideDetails

MostrarMostrar u ocultar áreas de colocación

El siguiente código muestra u oculta las áreas de colocación en la vista Tabla dinámica. A diferencia de la vista Gráfico dinámico, la vista Tabla dinámica permite mostrar y ocultar determinadas áreas de colocación.

Me.PivotTable.ActiveView.DataAxis.Label.Visible = False

Me.PivotTable.ActiveView.RowAxis.Label.Visible = True

Me.PivotTable.ActiveView.ColumnAxis.Label.Visible = True

Me.PivotTable.ActiveView.FilterAxis.Label.Visible = False

MostrarExportar la vista a Microsoft Excel

MostrarExportar la vista a Microsoft Excel

Utilice el siguiente código para exportar una vista Tabla dinámica a Excel. De este modo, aprovecha las ventajas que ofrecen las funciones de tablas dinámicas más avanzadas de Excel, como la impresión.

Me.PivotTable.Export "Nombre del archivo", plExportActionOpenInExcel

MostrarExportar la vista como una imagen

El siguiente código exporta una imagen .gif de una vista Tabla dinámica. Al exportar una imagen de la vista, podrá compartir una imagen estática de la vista con otros usuarios.

'1024 X 1024 es el tamaño de la vista.
Me.PivotTable.ExportPicture "C:\directorio\nombre de archivo.gif", , 1024, 1024

MostrarRestringir usuarios en tiempo de ejecución

El siguiente código impide que el usuario lleve a cabo tareas, como filtrar y agrupar, en una vista Tabla dinámica. Observe que no hay ninguna propiedad para deshabilitar la lista de campos.

Me.PivotTable.AllowFiltering = False

Me.PivotTable.AllowGrouping = False

Me.PivotTable.AllowCustomOrdering = False

Me.PivotTable.AllowDetail = False

Me.PivotTable.AllowPropertyToolbox = False

 Nota   Las propiedades PermitirEdiciones (AllowEdits), PermitirAgregar (AllowAdditions) y PermitirEliminación (AllowDeletion) están establecidas en Falso (False) y no se puede establecerlas en Verdadero (True).

MostrarObtener el valor de una celda

El siguiente código determina dónde un usuario ha hecho doble clic en una vista Tabla dinámica. A continuación, devuelve el valor y el tipo del elemento seleccionado.

Para ver en acción este código, agregue el siguiente código al procedimiento de evento Form_DblClick(Cancel As Integer) de un formulario cuya vista predeterminada está establecida en la vista Tabla dinámica.

If Me.CurrentView = acCurViewPivotTable Then ' Create some variables. Dim sel As Object Dim pivotagg As PivotAggregate Dim sTotal As String Dim sColMems As String Dim sRowMems As String Dim sFilters As String Dim sMsg As String ' Get the selection. Set sel = Me.PivotTable.Selection ' User could have clicked one of the following types of objects: ' PivotAggregates, PivotTotals, PivotMembers, PivotFields, etc. ' Use the TypeName() function to determine the object type. MsgBox "The Selection property returned a '" & TypeName(sel) & "' object.", _ vbInformation, "Type of Selection Prop" ' If the type is PivotAggregates, show how to get the row ' and column member(s) that define that aggregate. If TypeName(sel) = "PivotAggregates" Then ' PivotAggregates could contain many items, but because user could have ' double-clicked only a single item, it will contain just one item now, ' which will be item(0). Set pivotagg = sel.Item(0) ' Show the value. MsgBox "The cell you double-clicked has a value of '" & pivotagg.Value & _ "'.", vbInformation, "Value of Cell" ' Get the total name, row and column members, and the current filters. sTotal = pivotagg.Total.Caption sColMems = BuildFullName(pivotagg.Cell.ColumnMember) sRowMems = BuildFullName(pivotagg.Cell.RowMember) ' Build the message and show it. sMsg = "The value is " & sTotal & " by " & sRowMems & " by " & sColMems If Len(sFilters) > 0 Then sMsg = sMsg & " for " & Left(sFilters, Len(sFilters) - 2) End If MsgBox sMsg, vbInformation, "Value Info" End If ' typename(sel) = "PivotAggregates"End If ' Me.CurrentView = acCurViewPivotTable

A continuación, agregue la siguiente función al módulo del formulario.

Function BuildFullName(PivotMem) Dim pmTemp As PivotMember ' Temporary PivotMember reference Dim sFullName As String ' Start by getting the current member's name. sFullName = PivotMem.Caption ' Set the temp variable to the current member. Set pmTemp = PivotMem ' Navigate up the parent hierarchy until you hit nothing. While Not (pmTemp.ParentMember Is Nothing) Set pmTemp = pmTemp.ParentMember sFullName = pmTemp.Caption & "-" & sFullName Wend ' Return sFullName. BuildFullName = sFullNameEnd Function

Compile, guarde, cierre y vuelva a abrir el formulario en la vista Tabla dinámica. Agregue campos y totales a la vista y, a continuación, haga doble clic en una celda para ver qué sucede.

Ejemplos de la vista Gráfico dinámico

MostrarAgregar campos a la vista

MostrarAgregar campos a la vista

El siguiente código agrega campos a las áreas de categoría y colocación de valores de la vista.

Agregue este código al controlador de eventos Form_Open(Cancel As Integer) de un formulario cuya vista predeterminada está establecida en la vista Gráfico dinámico.

Me.ChartSpace.SetData c.chDimCategories, c.chDataBound, "OrderDate"

Me.ChartSpace.SetData c.chDimValues, c.chDataBound, "Freight"

MostrarHabilitar varios gráficos y establecer escala unificada

El siguiente código habilita varios gráficos y establece que todos los gráficos en el espacio de gráfico tenga una escala unificada.

forms(0).Form.ChartSpace.HasMultipleCharts = True

forms(0).Form.ChartSpace.HasUnifiedScales = True

MostrarDividir el eje del gráfico

El siguiente código divide el eje del gráfico de modo que los valores altos y bajos se muestran de manera lógica. La división se establece en realidad en el objeto chScaling asociado con el eje.

Agregue el siguiente código al controlador de eventos Form_Open(Cancel As Integer) del formulario.

Dim sc As ChScaling Set sc = Me.ChartSpace.Charts(0).Axes(chAxisPositionLeft).Scalingsc.HasSplit = True sc.SplitMinimum = 1 sc.SplitMaximum = 3

MostrarBorrar el espacio de gráfico y generar un gráfico literal

El siguiente código borra todos los gráficos del espacio de gráfico y genera un gráfico literal. Un gráfico literal no depende de ningún dato; sólo sirve para realizar demostraciones. Este código desactiva también las marcas de selección del gráfico.

Me.ChartSpace.Clear Me.ChartSpace.BuildLitChart Me.ChartSpace.Charts(0).Type = chChartTypeColumnClustered

MostrarOrdenar un campo

MostrarOrdenar un campo

El siguiente código ejecuta un comando de ordenación en el primer campo del eje de series del gráfico.

Dim ser As ChSeries Set ser = Me.ChartSpace.Charts(0).SeriesCollection(0)ser.Select Me.ChartSpace.Commands(chCommandSortDescending).Execute

MostrarAgregar y dar formato al título del gráfico

El siguiente código agrega un título al espacio de gráfico y da formato al título. Si el espacio de gráfico contiene varios gráficos, utilice un método similar para agregar títulos a cada gráfico.

Me.ChartSpace.HasChartSpaceTitle = True With Me.ChartSpaceTitle    .Caption = "Here's Your Title"    .Interior.Color = vbWhite    .Border.Color = vbBlack    .Border.DashStyle = chLineDashDot    .Font.Size = 16    .Font.Name = "verdana"    .Font.Color = vbGreen End With

MostrarCambiar la posición y la escala de los ejes

El siguiente código mueve los ejes de la izquierda a la derecha y de arriba abajo y, a continuación, cambia la escala de un eje de lineal a logarítmica.

Me.ChartSpace.Charts(0).Axes(0).Position = chAxisPositionTop
Me.ChartSpace.Charts(0).Axes(1).Position = chAxisPositionRight

Me.ChartSpace.Charts(0).Axes(0).Scaling.Type = chScaleTypeLogarithmic

MostrarAgregar mapas de formato (formato condicional)

El siguiente código agrega mapas de formato a un formulario de Access en la vista Gráfico dinámico. Agregue el código al controlador de eventos Form_Open(Cancel As Integer) de un formulario cuya vista predeterminada está establecida en la vista Gráfico dinámico.

' The following three lines of code add fields to the chart. The third value is ' the format value, which will be used to format data points. In this example, ' the value of freight will be color-coded to display the relative ranking of a ' given data point's value. Me.ChartSpace.SetData c.chDimCategories, c.chDataBound, "OrderDate" Me.ChartSpace.SetData c.chDimValues, c.chDataBound, "Freight" Me.ChartSpace.SetData c.chDimFormatValues, c.chDataBound, "Freight"' Add a format map and then set the format map's properties. The result is that ' data points with higher values will have red shading, and data points with ' lower values will have blue shading. Dim ch Set ch = Me.ChartSpace.Charts(0) ch.SeriesCollection(0).FormatMap.Segments.Add ch.SeriesCollection(0).FormatMap.Segments(0).Begin.Interior.Color = vbRed ch.SeriesCollection(0).FormatMap.Segments(0).End.Interior.Color = vbBlue ch.SeriesCollection(0).FormatMap.Segments(0).HasDiscreteDivisions = True
' Set the chart type to Column Clustered. ch.Type = chChartTypeColumnClustered' Enhance the appearance of the chart. With Me.ChartSpace    .DisplayFieldButtons = True    .DisplayToolbar = False    .HasChartspaceLegend = True    .HasChartSpaceTitle = True    .ChartSpaceTitle.Caption = "Freight Totals Over Time" End With

MostrarMostrar u ocultar áreas de colocación

MostrarMostrar u ocultar áreas de colocación

El siguiente código oculta las áreas de colocación del gráfico.

Me.ChartSpace.DisplayFieldButtons = False

MostrarAgregue una leyenda

El siguiente código agrega una leyenda a la vista, le da formato y, a continuación, la mueve a la parte inferior de la vista.

Me.ChartSpace.Charts(0).HasLegend = True With Me.ChartSpace.Charts(0).Legend    .Interior.Color = vbBlack    .Font.Color = vbWhite    .Border.Color = vbGreen End With Me.ChartSpace.charts(0).Legend.Position = chLegendPositionBottom

MostrarAgregar líneas de división secundarias

El siguiente código agrega líneas de división secundarias al eje 0.

Me.ChartSpace.Charts(0).Axes(0).HasMinorGridlines = True

MostrarAgregar líneas de división personalizadas

El siguiente código muestra cómo dibujar objetos y agregar texto a un formulario en la vista Gráfico dinámico. En este ejemplo, se calcula el promedio de varios puntos de una serie y se dibuja una línea en ese valor del gráfico.

Agregue este código al controlador de eventos Form_Open(Cancel As Integer) de un formulario cuya vista predeterminada está establecida en la vista Gráfico dinámico. Agregue campos a las áreas de colocación y una leyenda al gráfico.

' This code causes the chartspace to repaint, which fires the form's ' AfterFinalRender event. This event handler will draw objects and ' add text to the chart. Me.ChartSpace.repaint

Agregue el siguiente código al controlador de eventos Form_AfterFinalRender(drawObject as object)

' This code sets up the variables needed for performing calculations ' and for actually drawing lines and text on the chart.Dim average as Double Dim total as Double Dim number as Double Dim s as chSeries Dim p as chPoint Dim x as Integer Dim y as Integer Dim pa as chPlotArea' This code cycles through all points in all series on the chart, ' totals the vales, and counts the points. Then the code calculates ' the average value of a point. Set pa = Me.ChartSpace.Charts(0).PlotArea For Each s In Me.ChartSpace.Charts(0).SeriesCollection    For Each p In s.Points        total = total + p.GetValue(chDimValues)        number = number + 1    Next Next Average = total/number
' This code uses the series ValueToPoint method to convert the average value ' to a pixel location on the chart. Me.ChartSpace.Charts(0).SeriesCollection(0).ValueToPoint x, y, 0, average
' This code sets properties on the drawObject (in this case, the chart). drawObject.Line.Color = "red" drawObject.Line.Weight = 2 drawObject.Font.Color = "red" drawObject.Font.Size = 9
' This code uses the DrawLine and DrawText methods to draw a line and some ' text on the chart. Other available draw methods can provide many ' interesting draw capabilities. drawObject.DrawLine pa.Left + 1, y, pa.Right - 1, y drawObject.DrawText "Average", pa.left - 45, y - 10

MostrarExportar la vista Gráfico dinámico como una imagen

El siguiente código exporta una imagen .gif de una vista Gráfico dinámico. Al exportar una imagen de la vista, podrá compartir una imagen estática de la vista con otros usuarios.

Me.ChartSpace.ExportPicture "C:\yourdirectory\filename.gif", , 1024, 1024

MostrarRestringir usuarios en tiempo de ejecución

El siguiente código establece las propiedades de protección de un formulario de Access en la vista Gráfico dinámico. Observe que no hay ninguna propiedad para restringir el acceso a la lista de campos.

Me.ChartSpace.AllowFiltering = False Me.ChartSpace.AllowGrouping = False Me.ChartSpace.AllowPropertyToolbox = False Me.ChartSpace.HasSelectionMarks = False

Para obtener más información sobre la programación en Microsoft Access, visite Office Developer Center en Microsoft Developer Network (MSDN).

 
 
Corresponde a:
Access 2003