2012-10-08 19 views
10

Ho un foglio di lavoro Excel in cui una macro legata a un pulsante disegna forme dinamiche in base ai parametri di input dell'utente nel foglio di lavoro.Elimina tutte le forme nel foglio di lavoro Excel eccetto i controlli del modulo

Sto provando a scrivere una nuova macro per pulire il foglio o, in altre parole, eliminare tutte le forme nel foglio di lavoro.

Ho provato a utilizzare il codice riportato di seguito e in effetti elimina tutte le forme, tuttavia i controlli dei form dei pulsanti vengono eliminati anche durante il processo. C'è un modo semplice per sbarazzarsi delle forme (frecce, caselle di testo, ellissi, ecc.) Nel foglio di lavoro? Grazie mille!!!

Sub DeleteAllShapes() 

Dim Shp As Shape 

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

End Sub 

risposta

15

Per eliminare le forme e le caselle di testo solo è possibile utilizzare:

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 

In alternativa si può lavorare il contrario e specificare i tipi di non cancellare. È possibile utilizzare i tipi enumerati ma è più leggibile utilizzare i nomi dei tipi. Il seguente frammento eliminerà tutto tranne i controlli Form e gli oggetti controllo 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 

Un elenco completo di tipi di forme MSO. http://msdn.microsoft.com/en-us/library/office/aa432678(v=office.12).aspx

Ron de Bruin ha una buona collezione di frammenti che possono essere rilevanti per chiunque altro incontri questa domanda. http://www.rondebruin.nl/controlsobjectsworksheet.htm

+0

sfortunatamente non funziona: 1. i controlli del modulo vengono cancellati così come le forme quando eseguo il 1 ° codice. 2. il secondo funziona meglio: cancella le forme e lascia i controlli del modulo da solo. tuttavia, questa volta "caselle di testo" non vengono cancellate. Sono quasi certo che ci fosse un codice di un solo liner che fa il trucco, ma non riesco a ricordarlo. – marillion

+0

Che tipo di controlli del form hai? L'ho appena testato (il secondo) nelle caselle di controllo Controllo ActiveX e nei pulsanti Controllo modulo e funziona perfettamente. –

+0

Scusa, avevo appena modificato il mio commento una volta che ho visto il tuo secondo. Come hai detto, il secondo codice non tocca i controlli del modulo, che è perfetto. Tuttavia, non cancella le caselle di testo per qualche motivo. – marillion

Problemi correlati