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.
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.