Hoy necesito una pequeña ayuda para un tema que tengo que resolver en excel.
Voy a explicarlo de la manera más sencilla posible. Tengo un libro de excel con varias hojas (fichas.xslm), todas tienen un mismo gráfico series. El tema es que esas series salen de datos que están en otro libro distinto con varias hojas también (base de datos.xlsm).
Por ejemplo: el libro "fichas.xlsm" contiene hojas llamadas: peras, manzanas, plátanos. Y en cada hoja hay un gráfico que busca datos en el libro "base datos.xlsm" en el que hay las mismas hojas (peras, manzanas, plátanos) pero con tablas de datos.
La pregunta es: ¿puedo hacer que la ruta de origen de los datos esté vinculada a una celda? Es decir, si yo tengo:
La intención es que cada gráfico saque los datos de una hoja distinta de la base de datos según el nombre que se le dé en una celda.
(Adjunto un zip con los dos archivos base datos y fichas)
PD: sé que esto no tiene que ver directamente con VBA, pero he intentado utilizar los caracteres para unir texto y variables de VBA ( " & & ") como en el ejemplo y no lo he conseguido. Así que supongo que tendré que hacerlo con macros. Si pudiera hacerlo sin macros también me sirve.
Muchas gracias, si algo no ha quedado claro del todo preguntadme e intento alcarar.
Al final lo he hecho con una macro. Simplemente va hoja por hoja copiando la primera hoja y modifica las series de los gráficos según el nombre de la hoja en la que está.
Es relativamente sencillo:
[CODE]Sub Prueba1()
'
' Prueba1 Macro
'
Dim nombre As String
Dim hoja As Worksheet
For Each hoja In Worksheets
If hoja.Name = "Manzana" Then GoTo NoCopia:
ActiveWorkbook.Worksheets(1).Cells.Copy
hoja.Activate
hoja.Cells.Select
ActiveSheet.Paste
Application.CutCopyMode = False
NoCopia:
nombre = ActiveSheet.Name
ActiveSheet.ChartObjects(1).Activate
'Crea serie 1
ActiveChart.FullSeriesCollection(1).Name = "='[base datos.xlsm]" & nombre & "'!$B$4"
ActiveChart.FullSeriesCollection(1).Values = _
"='[base datos.xlsm]" & nombre & "'!$C$4:$E$4"
'Crea serie 2
ActiveChart.FullSeriesCollection(2).Name = "='[base datos.xlsm]" & nombre & "'!$B$5"
ActiveChart.FullSeriesCollection(2).Values = _
"='[base datos.xlsm]" & nombre & "'!$C$5:$E$5"
Next hoja
Buenos días,
Hoy necesito una pequeña ayuda para un tema que tengo que resolver en excel.
Voy a explicarlo de la manera más sencilla posible. Tengo un libro de excel con varias hojas (fichas.xslm), todas tienen un mismo gráfico series. El tema es que esas series salen de datos que están en otro libro distinto con varias hojas también (base de datos.xlsm).
Por ejemplo: el libro "fichas.xlsm" contiene hojas llamadas: peras, manzanas, plátanos. Y en cada hoja hay un gráfico que busca datos en el libro "base datos.xlsm" en el que hay las mismas hojas (peras, manzanas, plátanos) pero con tablas de datos.
La pregunta es: ¿puedo hacer que la ruta de origen de los datos esté vinculada a una celda? Es decir, si yo tengo:
[CENTER]=SERIES('[base datos.xlsm][B]Peras[/B]'!$B$4;;'[base datos.xlsm][B]Peras[/B]'!$C$4:$E$4;1),
[/CENTER]
[/CODE]
puedo poner "peras" en la celda A1 y y que la fórmula sea algo como
[CENTER]=SERIES('[base datos.xlsm][B]"&A1&"[/B]'!$B$4;;'[base datos.xlsm][B]"&A1&"[/B]'!$C$4:$E$4;1)
[/CENTER]
[/CODE]
La intención es que cada gráfico saque los datos de una hoja distinta de la base de datos según el nombre que se le dé en una celda.
(Adjunto un zip con los dos archivos base datos y fichas)
PD: sé que esto no tiene que ver directamente con VBA, pero he intentado utilizar los caracteres para unir texto y variables de VBA ( " & & ") como en el ejemplo y no lo he conseguido. Así que supongo que tendré que hacerlo con macros. Si pudiera hacerlo sin macros también me sirve.
Muchas gracias, si algo no ha quedado claro del todo preguntadme e intento alcarar.
Un saludo,
[color=blue]- - - - - Mensaje combinado - - - - -[/color]
Al final lo he hecho con una macro. Simplemente va hoja por hoja copiando la primera hoja y modifica las series de los gráficos según el nombre de la hoja en la que está.
Es relativamente sencillo:
'
' Prueba1 Macro
'
Dim nombre As String
Dim hoja As Worksheet
For Each hoja In Worksheets
If hoja.Name = "Manzana" Then GoTo NoCopia:
ActiveWorkbook.Worksheets(1).Cells.Copy
hoja.Activate
hoja.Cells.Select
ActiveSheet.Paste
Application.CutCopyMode = False
NoCopia:
nombre = ActiveSheet.Name
ActiveSheet.ChartObjects(1).Activate
'Crea serie 1
ActiveChart.FullSeriesCollection(1).Name = "='[base datos.xlsm]" & nombre & "'!$B$4"
ActiveChart.FullSeriesCollection(1).Values = _
"='[base datos.xlsm]" & nombre & "'!$C$4:$E$4"
'Crea serie 2
ActiveChart.FullSeriesCollection(2).Name = "='[base datos.xlsm]" & nombre & "'!$B$5"
ActiveChart.FullSeriesCollection(2).Values = _
"='[base datos.xlsm]" & nombre & "'!$C$5:$E$5"
Next hoja
End Sub
[/CODE]
Ejemplos.zip