• No results found

Quizá el mejor modo de familiarizarse con el modelo de objeto de clase Chart sea activar el Grabador de macro mientras se crean y manipulan gráficos.

AÑO 2000 SEAT 1200 BMW 2000 AUDI 3200 FIAT 1300 RENAULT 3100

VENTAS DEL AÑO 2000

1200 2000 3200 1300 3100 0 500 1000 1500 2000 2500 3000 3500

SEAT BMW AUDI FIAT RENAULT

MARCAS

179

Marcela Genero Bocco – Noviembre del 2002

Sub grafico()

Range("A2:E6").Select Charts.Add

ActiveChart .ChartType = xlColumnClustered

ActiveChart .SetSourceData Source:=Sheets("Hoja1").Range("A2:E6"), PlotBy:= _ xlColumns

ActiveChart .Location Where:=xlLocationAsObject , Name:="Hoja1" With ActiveChart

.HasTitle = True

.ChartTitle.Characters.Text = "VENTAS DEL AÑO 2000" .Axes(xlCategory, xlPrimary).HasTitle = True

.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "MARCAS" .Axes(xlValue, xlPrimary).HasTitle = True

.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "CANTIDAD" End With

ActiveChart .HasLegend = False

ActiveChart .ApplyDataLabels Type:=xlDataLabelsShowValue, LegendKey:=False End Sub

Excel con VBA

Cuando se genera un gráfico usando el método Add de la colección Charts, el gráfico es siempre una hoja de gráfico. En el código anterior, el método Location mueve el gráfico a una hoja de cálculo.

ACTIVAR UN GRÁFICO

El código VBA puede activar un gráfico incrustado usando el método Activate. ActiveSheet.ChartObjects(“Gráfico 1”).Activate

Si el gráfico se encuentra en una hoja de gráfico, se usa una instrucciión como esta: Sheets(“Gráfico1”)Activate

Una vez activado el gráfico, se puede hacer referencia a él en el código con ActiveChart. Por ejemplo, la siguiente instrucción despliega el nombre del gráfico activo. S no existe un gráfico activo, la instrucción genera un error.

181

Marcela Genero Bocco – Noviembre del 2002

Para modificar un gráfico en VBA, no es necesario activarlo. Veamos un ejemplo que cambia el tipo de gráfico a Areas.

Sub Modificar_Grafico

ActiveSheet.ChartObjects(“Grafico1”).Chart.Type = xlArea End Sub

Convertir un gráfico incrustado en una hoja de gráfico

Sub ConvertChart1()

Sheets(“Hoja1”).ChartObjects(1).Chart.Location xlLocationAsNewShee, “Mi Gráfico” End Sub

Convertir una hoja de gráfico en un gráfico incrustado

Sub ConvertChart2()

Charts(“Mi gráfico”).Location xlLocationAsObject, “Hoja1” End Sub

Excel con VBA

Determinar si un gráfico está activado

La siguiente función CharIsSelected devuelve Verdadero si está activa una hoja de grafico o si está activo un gráfico incrustado, y devuelve Falso si no está activado ningún gráfico: Private Function ChartIsSelected() As boolean

Dim x As String ChartIsSelected = False On Error Resume Next x = ActiveChart.Name

if Err = 0 Then CharIsSelected = True End Function

Eliminar ObjetosGráficos (ChartObjects) de gráficos (Charts)

Para eliminar objetos de clase ChartObject de un libro de trabajo, se puede usar simplemente el método Delete de la colección ChartObjects.

183

Marcela Genero Bocco – Noviembre del 2002

Para eliminar hojas de gráfico de un libro de trabajo activo, se usa la siguiente instrucción:

ActiveWorkBook.Charts.Delete

Normalmente, si se eleminan hojas Excel presenta una advertencia. El usuario debe contestar a este aviso para que pueda continuar la macro. Para elimnar este aviso se usa la siguiente serie de instrucciones:

Application.DisplayAlerts = False ActiveWork.Charts.Delete Application.DisplayAlerts = False

Excel con VBA

Aplicar formato al gráfico

El siguiente ejemplo aplica diferentes tipos de formato al gráfico activo: Sub ChartMod1() with ActiveChart .Type = xlArea .ChartArea.Font.Name = “Arial” .ChartArea.FontStyle = “Regular” .PlotArea.Interior.ColorIndex = xlNone .Axes(xlValue).TickLabels.Font.Bold = True .Axes(xlCategory).TickLabels.Font.Bold = True .HasLegend = True .Legend.Position = xlBottom End with End Sub

185

Marcela Genero Bocco – Noviembre del 2002

Aplicar formato al gráfico

El siguiente ejemplo funciona en un gráfico concreto: el contenido en un ChartObject llamado Gráfico 1, ubicado en la Hoja1. Nótese que el gráfico nunca se activa. Sub ChartMod2()

with Sheets(“Hoja1”).ChartObjects(Gráfico 1”).Chart .Type = xlArea .ChartArea.Font.Name = “Arial” .ChartArea.FontStyle = “Regular” .PlotArea.Interior.ColorIndex = xlNone .Axes(xlValue).TickLabels.Font.Bold = True .Axes(xlCategory).TickLabels.Font.Bold = True .HasLegend = True .Legend.Position = xlBottom End with End Sub

Excel con VBA

Bucle por todos los gráficos

En algunos casos es necesario ejecutar una operación en todos los gráficos. El siguiente ejemplo cambia el tipo de gráfico para cada gráfico incrustado en una hoja activa. Sub Cambiar_Tipo_Grafico1()

For each cht In ActiveSheet.ChartObjects cht.Chart.Type = xlArea Next cht

End Sub

El siguiente procedimiento realiza la misma operación que el procedimiento anterior pero funciona en todas las hojas de gráfico de un libro de trabajo activo:

Sub Cambiar_Tipo_Grafico2()

For each cht In ActiveWorkBook.Charts cht.Type = xlArea

Next cht End Sub

187

Marcela Genero Bocco – Noviembre del 2002

Bucle por todos los gráficos

Sub Cambiar_Leyenda()

For each cht In ActiveSheet.ChartObjects With cht.hart.Legend.Font .Name = “Arial” .FontStyle = “Bold” .Size = 12 End With Next cht End Sub

Alinear y ajustar el tamaño de los ObjetosGráficos (ChartObjects)

Un objeto de clase ChartObject posee propiedades de posición y tamaño estándar, a las que se puede acceder con el código VBA. El siguiente ejemplo ajusta el tamaño de todos los objetos de la clase ChartObject en HOJA1, de forma que se ajusten a las dimensiones del ChartObject llamado Gráfico 1. También ordena los objetos de clase ChartObject de forma que aparezcan uno después del otro a lo largo de la izquierda de la hoja de cálculo:

Excel con VBA

Alinear y ajustar el tamaño de los ObjetosGráficos (ChartObjects)

Sub Tamaño_Posición_Gráficos

W = ActiveSheet.ChartObjects(“Gráfico 1”).Width H = ActiveSheet.ChartObjects(“Gráfico 1”).Height TopPos = 0

For each chtObj in ActiveSheet.ChartObjects with chtObj .Width = W .Height = H .Left = 0 .Top = TopPos End With TopPos = TopPos + H Next chtObj End Sub

189

Marcela Genero Bocco – Noviembre del 2002

Presentar un gráfico en un UserForm

Supongamos que tenemos un procedimiento grafico que genera un gráfico incrustado en la hoja1.

Sub ShowChart () grafico

UserForm1.Show End Sub

Private Sub UserForm1_Initialize()

Set CurrentChart = ActiveSheet .ChartObjects(1).Chart Fname = ThisWork.Path & "\temp.gif"

CurrentChart .Export FileName:=Fname, FilterName:="GIF" Sheets("Hoja1").ChartObjects1(1).Delete

Image1.Picture = LoadPicture(Fname) Application.ScreenUpdating = True Kill ThisWorkbook.Path & "\temp.gif" End Sub

Excel con VBA

Parte 10:

Rangos

191

Marcela Genero Bocco – Noviembre del 2002

Related documents