Insertar gráfico de excel desde access

Quería preguntarte si sabes como puedo insertar un gráfico de excel desde código visual basic de access, en el código de access he habilitado todas las librerías necesarias para que se supone pueda coger los comandos de excel pero he insertado el siguiente código, que lo he cogido de una macro que he grabado en excel al crear un gráfico, para que haga exactamente lo mismo:
'MACRO PARA HACER EL GRÁFICO
Charts.Add
 ActiveChart.ChartType = xlBarOfPie
ActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A22:C&(22+ " & totalmatriztotalmotivos & ""), PlotBy _
:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1"
With ActiveChart
 .HasTitle = True
 .ChartTitle.Characters.Text = "Grafico de % de motivos no interesa"
End With
ActiveSheet.Shapes("Gráfico 2").IncrementLeft -231.75
ActiveSheet.Shapes("Gráfico 2").IncrementTop 214.5
ActiveSheet.Shapes("Gráfico 2").ScaleWidth 0.6, msoFalse, msoScaleFromTopLeft
Windows("Informe-RdosLlamada_y_Motivos_NI-05-09-2008 12'21'00.xls"). _
SmallScroll Down:=15
ActiveSheet. Shapes("Gráfico 2").ScaleHeight 0.79, msoFalse, _
MsoScaleFromTopLeft
Pero me da el siguiente error:
"Error en el método 'Charts' de objeto '_Global'"
No se a que se debe ya que el código esta cogido de una macro de excel...
Si puedes ayudarme te lo agradecería

1 Respuesta

Respuesta
1
Hoy es mi día de estar lento de reflejos.
Por lo que entiendo de tu pregunta lo que quieres hacer es lo siguiente:
¿Coger una gráfica que esta hecha en excel y pegarla en access?
Si lo que pretendes es otra cosa notifícamelo, cuando tenga respuesta a esta pregunta procederé a contestarte, pero ahora mismo no entiendo bien que me planteas, ya que no se si quieres coger una tabla ya hecha y pegarla en access, si quieres coger datos de access y hacer una tabla en excel...
Lo que quiero es lo siguiente:
Yo tengo unas tablas en access de las que saco datos dependiendo de unos filtros en un formulario, hago una consulta para coger esos datos y los paso a un recordset.
Después voy cogiendo los datos del recordset y los pego en una hoja de excel, y al final de mi función lo que quiero es que desde access me haga una gráfica dependiendo de esos datos que he pegado en excel, es decir, desde código visual basic en access crear un gráfico en excel.
No se si me he explicado bien, si sigues sin entenderme házmelo saber e intentare aclarártelo
Te entiendo, pero creo que te complicas sin ningún motivo.
Tu pasas de access a excel unos datos (como lo hagas no importa). Después quieres que con esos datos te cree una gráfica en el mismo libro de excel donde se encuentran los datos importados, pero quieres hacerlo desde access...
Ahora bien, si el libro de excel ya existe puedes simplemente poner ahí la macro parar hacer la tabla... si no existe pues entonces hay dos posibilidades, que desde access al crear el libro nuevo coja en vez de modelo el normal.dot coja una plantilla que tenga ya esa macro o bien de la forma que tu dices, es decir, ejecutando la macro desde access.
Creo que la forma que tu dices es la más compleja (por lo menos para mi je je).
Si el libro ya existe hay ningún problema para hacerlo ya que se deja la macro en excel y se la llama desde la de access, sino existe pues ya me dirás tu que prefieres, si que cree el libro con la macro o que lo haga como tu dices.
Ya se lo que me dices, pero la verdad me gustaba más la idea de hacerlo desde access, puesto que esto es para adelantar trabajo para otras personas y quería dejárselo automatizado, pero lo que tu me propones parece que puede vale, aunque seguiré investigando por si puedo hacerlo de otra forma.
Queda automatizado igualmente... en el documento de excel pones la macro en el worksheets. Open y listo
Desde access supongo que será viable, pero ya te digo, lo normal es que las macros de excel estén en el excel y las de access en el access, tu desde access creas el excel con los datos y con la macro que se ejecute de última y ya esta, es igual de automático igual, lo que pasa es que en vez de ejecutarse desde access, se ejecuta desde excel (lo lógico)
Ya, es muy buena tu forma de solucionar esto, pero... a mi no me vale, es que los datos que yo uso para hacer el gráfico varían, tanto en tamaño de celdas afectadas como en las variables que utilizo, entonces la macro no puede estar preparada en excel para mi, porque esos parámetros variables solo los sabe access(ya que es el programa que crea esas tablas) y por lo tanto no funcionaria bien la macro. Si se te ocurre algo más házmelo saber, de todas formas veo que tienes recursos, eso es bueno...
Esta solución me la apunto para otros casos, ;)
Un saludo y gracias
Que la cantidad de datos varíe no influye para nada a la hora de crear la tabla.
Lo que voy a hacer es preparar una hoja de excel que colgare para que te puedas bajar y probar para que veas como sería una creación automática de tablas y creo recordar que ya tenias la macro para que te creara la hoja de excel, simplemente te pondré a mayores lo que tendrías que añadir para que te creara la hoja de excel y pruebas a ver si te gusta mi solución, mañana a la mañana te colgaré el link y te explicaré todo, ahora acabo de llegar de una conferencia de casi tres horas y mi cabeza pide desconectar, pero mañana me pongo con ello y si no es de tu agrado te busco otra solución, pero estoy casi convencido de que te gustara y verás que además es sencillo.
Estoy algo liado en el curro, por ahora te voy a dejar ya la macro que te crea una tabla automáticamente:
Sub hacertabla()
Dim rango As Range
Set rango = Range("A1", Range("A1").End(xlToRight).End(xlDown))
Charts.Add
ActiveChart.ChartType = xl3DColumnClustered
ActiveChart.SetSourceData Source:=rango, PlotBy:= _
xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1"
With ActiveChart
.HasTitle = False
.Axes(xlCategory).HasTitle = False
.Axes(xlSeries).HasTitle = False
.Axes(xlValue).HasTitle = False
End With
End Sub
En el set rango, lo único a cambiar es el A1 que se repite, si los datos tu los metes desde A1 se queda así, pero si los datos empiezan en B59 pues tendrás que poner en los dos lados B59.
El resto es el código de crear el gráfico, en ese caso es el de un gráfico normalito en 3D sin nada, se le pueden añadir más cosas para que te lo haga de determinados tipos de gráficos (te salte un inputbox y selecciones que tipo de gráfico quieres), no se, se pueden hacer muchas cosas y con esta macro te va a dar exactamente igual la cantidad de datos exportes de access ya que se acomoda a la cantidad de datos...
Si te pasas por aquí antes de que yo acabe con mis obligaciones laborales comenta como ves esto, si ya tenias algo parecido, etc, etc. Yo seguramente me pase a leer de vez en cuando, aunque ahora no tengo tiempo para terminar bien la macro, lo siento, esto no me da de comer je je
Voy a dejar esto como terminado porque al final lo que haré sera dejar un botón para que se pinche y se haga automáticamente el gráfico, ya que yo ya tenia una macro muy parecida hecha, lo único que variaba era el tipo de gráfico. Muchas gracias por tu atención y un saludo.
Sergio Gallego

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas