Gráficos en distintas hojas
Publicado por Raúl (1 intervención) el 03/05/2006 12:03:24
Hola a todos:
Mi problema es que no consigo crear gráficos Excel desde Visual Basic. El problema es muy extraño porque el mismo código funciona como macro en Excel pero no al hacerlo desde Visual Basic.
El caso es que desde Visual Basic voy introduciendo datos en un libro que tiene unas cuantas hojas y lo que necesito es que cada hoja represente los datos que en ella se encuentran. Sin embargo, todas las gráficas me aparecen en la misma hoja, que es la primera del libro. Utilizo el método location para crear el gráfico como un objeto en la hoja que yo le indico, pero no hace caso al parámetro "Name". No sé lo que hago mal...
Básicamente el código es:
Dim xl As Excel.Application
Dim hj As Excel.Worksheet, hjref As Excel.Worksheet
Dim ct As Excel.Chart
Dim NombreHoja as String
Set xl = New Excel.Application
xl.Workbooks.Open App.Path & "\Mi libro"
For i = 1 To xl.ActiveWorkbook.Worksheets.Count
Set hj = xl.ActiveWorkbook.Worksheets(i)
NombreHoja = hj.Name
j = 2
Do Until hj.Cells(j, 1) = ""
j = j + 1
Loop
'Creo el gráfico.
RangoDatos = "A1:B" & CStr(j - 1)
xl.ActiveWorkbook.Charts.Add
Set ct = xl.ActiveWorkbook.ActiveChart
With ct
.ChartType = xlColumnClustered
.SetSourceData Source:=hj.Range(RangoDatos), PlotBy:= _
xlColumns
.HasTitle = False
.Name = "Graf " & hj.Name
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Fecha"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Número alarmas"
.HasAxis(xlCategory, xlPrimary) = True
.HasAxis(xlValue, xlPrimary) = True
.Axes(xlCategory, xlPrimary).CategoryType = xlCategoryScale
.HasLegend = False
.HasDataTable = False
End With
Set ct = ct.Location(Where:=xlLocationAsObject, Name:=NombreHoja)
Set hj = Nothing
Set ct = Nothing
Next i
El problema debería encontrarse en el método location, pero el mismo código funciona bien como una macro en Excel. ¿Alguna incompatibilidad entre Visual Basic y Excel?. Trabajo con Visual Basic 6 y Excel 2000. Hace una cosa muy curiosa y es que cambia el nombre del objeto Chart después de la ejecución del método Location.
Muchas gracias por vuestra ayuda.
Un saludo,
Raúl.
Mi problema es que no consigo crear gráficos Excel desde Visual Basic. El problema es muy extraño porque el mismo código funciona como macro en Excel pero no al hacerlo desde Visual Basic.
El caso es que desde Visual Basic voy introduciendo datos en un libro que tiene unas cuantas hojas y lo que necesito es que cada hoja represente los datos que en ella se encuentran. Sin embargo, todas las gráficas me aparecen en la misma hoja, que es la primera del libro. Utilizo el método location para crear el gráfico como un objeto en la hoja que yo le indico, pero no hace caso al parámetro "Name". No sé lo que hago mal...
Básicamente el código es:
Dim xl As Excel.Application
Dim hj As Excel.Worksheet, hjref As Excel.Worksheet
Dim ct As Excel.Chart
Dim NombreHoja as String
Set xl = New Excel.Application
xl.Workbooks.Open App.Path & "\Mi libro"
For i = 1 To xl.ActiveWorkbook.Worksheets.Count
Set hj = xl.ActiveWorkbook.Worksheets(i)
NombreHoja = hj.Name
j = 2
Do Until hj.Cells(j, 1) = ""
j = j + 1
Loop
'Creo el gráfico.
RangoDatos = "A1:B" & CStr(j - 1)
xl.ActiveWorkbook.Charts.Add
Set ct = xl.ActiveWorkbook.ActiveChart
With ct
.ChartType = xlColumnClustered
.SetSourceData Source:=hj.Range(RangoDatos), PlotBy:= _
xlColumns
.HasTitle = False
.Name = "Graf " & hj.Name
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Fecha"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Número alarmas"
.HasAxis(xlCategory, xlPrimary) = True
.HasAxis(xlValue, xlPrimary) = True
.Axes(xlCategory, xlPrimary).CategoryType = xlCategoryScale
.HasLegend = False
.HasDataTable = False
End With
Set ct = ct.Location(Where:=xlLocationAsObject, Name:=NombreHoja)
Set hj = Nothing
Set ct = Nothing
Next i
El problema debería encontrarse en el método location, pero el mismo código funciona bien como una macro en Excel. ¿Alguna incompatibilidad entre Visual Basic y Excel?. Trabajo con Visual Basic 6 y Excel 2000. Hace una cosa muy curiosa y es que cambia el nombre del objeto Chart después de la ejecución del método Location.
Muchas gracias por vuestra ayuda.
Un saludo,
Raúl.
Valora esta pregunta


0