2012-10-08 37 views
10

Tengo una hoja de cálculo de Excel donde una macro vinculada a un botón dibuja formas dinámicas basadas en los parámetros de entrada del usuario en la hoja de trabajo.Borrar todas las formas en la hoja de cálculo de Excel excepto controles de formulario

Estoy tratando de escribir una nueva macro para limpiar la hoja, o en otras palabras eliminar todas las formas en la hoja de trabajo.

He intentado utilizar el código siguiente, y de hecho elimina todas las formas, sin embargo, los controles de formulario de botón también se eliminan en el proceso. ¿Hay una manera fácil de deshacerse de las formas (flechas, cuadros de texto, elipses, etc.) en la hoja de trabajo? ¡¡¡Gracias un montón!!!

Sub DeleteAllShapes() 

Dim Shp As Shape 

For Each Shp In ActiveSheet.Shapes 
    Shp.Delete 
Next Shp 

End Sub 

Respuesta

15

Para eliminar formas automáticas y cajas de texto sólo se puede utilizar:

Sub DeleteAllShapes() 

Dim Shp As Shape 

For Each Shp In ActiveSheet.Shapes 
    If Shp.Type = msoAutoShape Or Shp.Type = msoTextBox Then Shp.Delete 
Next Shp 

End Sub 

alternativa, se puede trabajar al revés y especificar los tipos de no eliminar. Puede usar los tipos enumerados, pero es más fácil usar los nombres de tipo. El siguiente fragmento eliminará todo, aparte de los controles de formulario y los objetos de control OLE.

Sub DeleteAllShapes() 

Dim Shp As Shape 

For Each Shp In ActiveSheet.Shapes 
    If Not (Shp.Type = msoOLEControlObject Or Shp.Type = msoFormControl) Then Shp.Delete 
Next Shp 

End Sub 

Una lista completa de tipos de formas de MSO. http://msdn.microsoft.com/en-us/library/office/aa432678(v=office.12).aspx

Ron de Bruin tiene una buena colección de fragmentos que pueden ser relevantes para cualquier persona que se encuentre con esta pregunta. http://www.rondebruin.nl/controlsobjectsworksheet.htm

+0

lamentablemente no funciona: 1. los controles de formulario se eliminan, así como las formas cuando ejecuto su 1er código. 2. el segundo funciona mejor: borra las formas y deja solo los controles de forma. sin embargo, esta vez los "cuadros de texto" no se eliminan. Estoy casi seguro de que había un código único que funciona, pero no puedo recordarlo. – marillion

+0

¿Qué tipo de controles de formulario tienes? Acabo de probarlo (el segundo) en las casillas de verificación del control ActiveX y en los botones de control de formulario, y funciona bien. –

+0

Disculpa, acababa de editar mi comentario una vez que vi tu segundo. Como dijiste, el segundo código no toca los controles de formulario, lo cual es perfecto. Sin embargo, no elimina cuadros de texto por alguna razón. – marillion

Cuestiones relacionadas