Usuario
Desde Access cómo usar .seriescollection para crear gráfico de barra apilada en Excel

Pregunta
-
Hola
Dede una Consulta de MS Access 2016, busco crear desde "Scratch" una Gráfica de Barra Apilada en una Hoja Excel.
La consulta muestra en la Hoja Excel 5 columnas.
La barra apilada de la gráfica debe formarse con datos de las columnas 1 y 3
El Campo de la Columna 1 es Fecha y el Campo de la Columna 3 es double
Las etiquetas del Eje Horizontal deben editarse con Registros de la Columna 5 (String)
He buscado por dos semanas en Internet y no he podio hallar para Access ejemplos y/o literatura que me ayude a escribir el código completo.
A la fecha tengo solo una línea de código que funciona bien para la primera linea de Código:
.SeriesCollection.NewSeries
SeriesCollection(1).Values == "=" & ws.Name & "!" & ws.Range(Cells(2, 1), Cells(ws.Range("A2").End(xlDown).Row, 1)).Address(True, True, xlA1, False)
Pero, al escribir la siguiente Línea de Código, VBA me da Error 91 Variable o Boque With no establecido.
.SeriesCollection.NewSeries
.SeriesCollection(1).Values = "=" & ws.Name & "!" & ws.Range(Cells(2, 3), Cells(ws.Range("C2").End(xlDown).Row, 1)).Address(True, True, xlC1, False).
Agradezco la ayuda que me puedan dar (enlaces/literatura) código para terminar mi Tarea.
Saludos
Todas las respuestas
-
-
Hola.
Aprecio tu respuesta.
Si, primero grabé la Macro en Excel.
Este es el Código que grafica la columna 3 sobre la 1 :
ActiveChart.FullSeriesCollection(2).Values = "=qry_123!$C$2:$C$15"
ActiveChart.FullSeriesCollection(2).XValues = "=qry_123!$E$2:$E$15"
Y este Código revierte el Orden de los datos del Eje X:
ActiveSheet.ChartObjects("Gráfico 1").Activate
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).ReversePlotOrder = TrueDesde MS Access este Código grafica la Columna 1:
.SeriesCollection.NewSeries
.SeriesCollection(1).Values = "=" & ws.Name & "!" & ws.Range(Cells(2, 1), Cells(ws.Range("A2").End(xlDown).Row, 1)).Address(True, True, xlA1, False)
Siguiendo esa lógica, escribí las siguientes instrucciones:
.SeriesCollection(2).Values = "=" & ws.Name & "!" & ws.Range(Cells(2, 3), Cells(ws.Range("C2").End(xlDown).Row, 1)).Address(True, True, xlC1, False)
Aquí VBA pinta de amarillo toda la instrucción y muestra el Error 91 'Variable de Objeto o bloque With no establecido.'
Por lo anterior, no puedo ver el efecto del siguiente código:
.SeriesCollection(2).XValues = "=" & ws.Name & "!" & ws.Range(Cells(2, 5), Cells(ws.Range("E2").End(xlDown).Row, 1)).Address(True, True, xlE1, False).
Para buscar la solución a este Error, investigué en todos los sitios de VBA para Access y para Excel y no he hallado siquiera literatura y/o un código de ejemplo que me ayude a terminar de escribir correctamente, desde MS Access, el bloque de código completo que indica la Macro que grabé en Excel.
También, he revisado Tutoriales escritos y en video y tampoco he tenido éxito.
Agradezco tu ayuda.
-
Hola
Si estás automatizando desde Access, tienes que crearte un objeto Excel.Application, un objeto Excel.Workbook y seguramente un chart (no se muy bien como se llama el tipo).
Instancia el objeto excel, desde él crea el workbook mediante un método Open del objeto excel.application (sí el libro existe, si no crea uno nuevo), y luego refiere al seriescollection como un elemento del workbook.
Esto es lo que encontré en Google
Suerte...
José Mª Fueyo
- Editado José Mª Fueyo martes, 30 de octubre de 2018 14:08
-
Hola. Eso que indicas ya lo tengo con las siguientes instrucciones:
Dim xl As Excel.Application, wb As Excel.Workbook, ws As Excel.Worksheet, xlChart As Excel.ChartObject
Dim sExcelWB As String
Set xl = CreateObject("excel.application")
sExcelWB = CurrentProject.Path & "\qry_123.xlsx"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qry_123", sExcelWB
Set wb = xl.Workbooks.Open(sExcelWB)
Set ws = wb.Sheets("qry_123")ws.Shapes.AddChart.Select
ws.ChartObjects(1).Chart.ChartType = xlBarStackedSet xlChart = ws.ChartObjects(1)
With .Chart.ChartType = xlBarStacked
.SeriesCollection.NewSeries
.....
.....
.....
End WIth
Lo anterior, me permite exportar y abrir la consulta a Excel y crear la grafica. Mi problema es que no puedo escribir correctamenteel código de las siguientes líneas:
.SeriesCollection.NewSeries
.SeriesCollection(2).Values = "=" & ws.Name & "!" & ws.Range(Cells(2, 3), Cells(ws.Range("C2").End(xlDown).Row, 1)).Address(True, True, xlC1, False)
.SeriesCollection(2).XValues = "=" & ws.Name & "!" & ws.Range(Cells(2, 5), Cells(ws.Range("E2").End(xlDown).Row, 1)).Address(True, True, xlE1, False)
Si lo anterior es lo que indicas y, si tienes sugerencias, por favor indicarlo.
Todos los consejos son bien recibidos.
Voy a estudiar el contenido del enlace que incluyes.
Muchas gracias
-
Hola.
A la fecha no he podido escribir las dos líneas de código correctamente indicadas en en mi reciente mensaje.
Enfoqué mi atención en el uso de SeriesCollection para entender la sintaxis, pero, no hallé lo buscado.
Esta linea de codigo corre bien:
.SeriesCollection.NewSeries
.SeriesCollection(1).Values = "=" & ws.Name & "!" & ws.Range(Cells(2, 1), Cells(ws.Range("A2").End(xlDown).Row, 1)).Address(True, True, xlA1, False)
Pero, la siguiente da error 91 Variable de objeto o bloque With no establecido.
.SeriesCollection.NewSeries
.SeriesCollection(2).Values = "=" & ws.Name & "!" & ws.Range(Cells(2, 3), Cells(ws.Range("C2").End(xlDown).Row, 1)).Address(True, True, xlC1, False)
.SeriesCollection(2).XValues = "=" & ws.Name & "!" & ws.Range(Cells(2, 5), Cells(ws.Range("E2").End(xlDown).Row, 1)).Address(True, True, xlE1, False)
Estoy sin avanzar.
No he podido referir al seriescollection como un elemento del Workbook.
Tampoco, he logrado escribir esas instrucciones en un bloque With.Agradezco la ayuda a tu alcance para poder escribir correctamente mi código.
Saludos