Borrar con Macros Gráfico incrustado

He realizado una macros en excel a través del grabador de macros en donde pretendo borrar un gráfico incrustado creado en una hoja1, el problema es que, cuando pretendo ejecutar la macros me aparece el siguiente error:
Se ha producido un error '1004' en tiempo de ejecución:
No se puede obtener la propiedad Chartobjects de la clase Worksheet
La idea es ejecutar la macros reiteradas veces.
¿Cómo le hago para poder borrar el gráfico cada vez que ejecute la macros?
Estuve buscando info. Y lo único serca que encontré a esto fue usar un string.

1 Respuesta

Respuesta
1
Cada vez que se inserta un objeto en una hoja de Excel, Excel las numera pongamos que has dibujado un rectángulo pues para excel el código de la inserción es :
ActiveSheet. Shapes. AddShape(msoShapeRectangle, 211.5, 75.75, 121.5, 83.25). _
        Select

Pero ahora si queremos eliminarlo por macro la instrucción sería:
ActiveSheet.Shapes("Rectangle 1").Select
    Selection.Delete

Que ocurre que si no identificas por su nombre la forma no podrás seleccionarla ni eliminarla, para evitar esto debes de dar tu el nombre a la figura para después saber su nombre y poder eliminarla:
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 128.25, 93.75, 127.5, 69.75). _
        Select
   Set numero = Sheets(1).Shapes
    ActiveSheet.Shapes(numero.Count).Name = "Figura1"

Ya la tenemos nombrada ahora queremos eliminarla pues la seleccionas primero por el nombre:
   ActiveSheet.Shapes("Figura1").Select
    Selection.Delete

Espero que te sea de utilidad, si es así puntúa, finaliza y comenta la consulta. Gracias.
>Un saludo
>Julio
Compañero Paramisolo las lineas que me entregaste funciona de maravilla!... el único problemilla es que cuando reinicio la macros este me entrega una nueva asignación para este nuevo gráfico(cada vez que creo un gráfico lo asigna "Gráfico 64", otra ejecución de la macros le llama "Gráfico 65"), tal vez no le entendí con las lineas que me envió. Te envío como traduje las lineas que me enviaste para poder borrar el gráfico en la hoja.
ActiveSheet.ChartObjects("Gráfico 65").Select
        Set numero = Sheets(1).ChartObjects
        ActiveSheet.ChartObjects(numero.Count).Name = "Grafico1"
        ActiveSheet.ChartObjects("Grafico1").Select
        Selection.Delete
Y gracias Paramisolo por la ayuda(la verdad es que no me manejo mucho con Visual basic) porque ahora voy entendiendo un poco más este enredo que tenía.
El ejemplo que te puse era para un solo objeto si vas a ir añadiendo objetos, dándoles nombre y posteriormente eliminarlos todos tienes que ir cambiando el nombre porque si no te dará error pues estas intentando dar el mismo nombre a todas las figura. Esta macro los crea:
Sub Crear()
Dim contador As Integer
Dim numero As Object
contador = 1
    For n = 1 To 5
    ActiveSheet.Shapes.AddShape(msoShapeRectangle, 128.25, 93.75, 127.5, 69.75). _
        Select
   Set numero = Sheets(1).Shapes
   ActiveSheet.Shapes(numero.Count).Name = "Figura " & contador & ""
   contador = contador + 1
    Next n
  End Sub
Y esta otra identifica los que tengas (da igual el numero) y los borra:
Sub borrar()
Dim i As Integer
Dim nombre As String
On Error Resume Next
Set numero = Sheets(1).Shapes
For i = 1 To (numero.Count)
ActiveSheet.Shapes(numero.Count).Name = "Figura " & i & ""
nombre = "Figura " & i & ""
     ActiveSheet.Shapes(nombre).Select
        Selection.Delete
Next i
End Sub
A ver si ahora te soluciona tu problema
>Un saludo
>Julio
PD: Si te ha servido puntúa y finaliza la consulta, un comentario siempre es bienvenido.
Te agradezco Julio por la atención a mis preguntas! ... fueron de muy utilidad!
No te había aclarado que, hice una macros para crear un gráfico y cada vez que inicio la macros me entrega una nueva asignación para este nuevo gráfico. Estuve ejecutando las lineas que me entregaste y funcionan de maravilla para borrar un gráfico que realizo sin macros.
No se si es posible seguir insistiendo con mi consulta, pero la deferencia ante mis preguntas an sido bien acogidas, por eso insisto. A continuación te envío lo que hecho para hacer el gráfico en macros.
Sub Grafico()
Range("A25:A41").Select
    Range("A25:A41,AG25:AG41,AI25:AI41").Select
    Range("AI25").Activate
    Charts.Add
    ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:= _
        "Líneas y columnas 2"
    ActiveChart.SetSourceData Source:=Sheets("Hoja 1").Range( _
        "A25:A41,AG25:AG41,AI25:AI41"), PlotBy:=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja 1"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Grafico Enero"
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Total"
        .Axes(xlCategory, xlSecondary).HasTitle = False
        .Axes(xlValue, xlSecondary).HasTitle = True
        .Axes(xlValue, xlSecondary).AxisTitle.Characters.Text = _
        "% Acumulado"
    End With
    ActiveChart.Axes(xlCategory).Select
    With Selection.TickLabels
        .Alignment = xlCenter
        .Offset = 100
        .ReadingOrder = xlContext
        .Orientation = xlUpward
    End With
    ActiveChart.Legend.Select
    Selection.Delete
    ActiveChart.Axes(xlCategory).Select
    With Selection.TickLabels
        .Alignment = xlCenter
        .Offset = 100
        .ReadingOrder = xlContext
        .Orientation = xlUpward
    End With
    ActiveChart.Axes(xlValue, xlSecondary).Select
    With ActiveChart.Axes(xlValue, xlSecondary)
        .MinimumScaleIsAuto = True
        .MaximumScale = 100
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With
    Selection.TickLabels.NumberFormat = "0"
End Sub
¿En qué lugar del módulo le digo a la macros que asigne con un único nombre al gráfico para que cada vez que ejecute la macros pueda borrarlo con el módulo que me entregaste? Porque cada vez que inicio la macros le asigna "gráfico 66"... ahora voy en "gráfico 69":P
Disculpa la torpeza de no haber podido aclarar desde un comienzo mi duda.
De ante mano muchas gracias Julio!.
Gracias!... infinitamente gracias julio!
Que torpeza la mía no haber podido darle más atención y esforzarme más por comprender.
Me resulto de maravilla las líneas que me regalaste!
! Si vivieras en Chile te regalaría un copete(Trago)! :)
Saludos Julio.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas