| 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
- Abra la base de datos a la que desee agregar la referencia.
- Haga clic en Código de la barra de herramientas para abrir el editor de Microsoft Visual Basic®.
- En el menú Herramientas, haga clic en Referencias.
- 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.
- Seleccione el archivo y haga clic en Abrir.
Ejemplos de la vista Tabla dinámica
Agregar campos a las áreas de fila, columna y detalle
Agregar 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
Agregar 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")
Agregar 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.
Quitar 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
Filtrar un campo de fila
Filtrar 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
Especificar 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
Cambiar el color de fondo y estilo de fuente de las celdas que muestran subtotales
Cambiar 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
Cambiar 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.
Mostrar u ocultar elementos
Mostrar 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
Mostrar 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
Exportar la vista a Microsoft Excel
Exportar 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
Exportar 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
Restringir 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).
Obtener 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
Agregar campos a la vista
Agregar 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"
Habilitar 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
Dividir 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
Borrar 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
Ordenar un campo
Ordenar 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
Agregar 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
Cambiar 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
Agregar 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
Mostrar u ocultar áreas de colocación
Mostrar u ocultar áreas de colocación
El siguiente código oculta las áreas de colocación del gráfico.
Me.ChartSpace.DisplayFieldButtons = False
Agregue 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
Agregar 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
Agregar 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
Exportar 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
Restringir 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).