LORETTA B. forum
Linguaggi di programmazione => Problematiche Excel => Topic aperto da: Tullio - Ottobre 10, 2013, 16:03:42
-
Ciao micdas,
eccomi di nuovo perché la sub che cancella le forme (mi sono accorto ieri) che cancella anche le celle di convalida, ma non riesco a capire come si chiamano e quindi come fare per non farle cancellare.
Mi sai dire qualcosa come al solito ?
Ciao. Tullio
Per cancellare le forme utilizzo:
---------------------------------------------
Sub z_FORME()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
shp.Delete
Next shp
End Sub
---------------------------------------------
Per rendere invisibili le forme utilizzo:
---------------------------------------------
Sub Pulsanti_invisibili()
Dim shp As Shape
Dim nameshp As String
For Each shp In ActiveSheet.Shapes
If shp.Visible = msoTrue Then
nameshp = shp.Name
'Se il nome inizia con "Button"
If Left(nameshp, 6) = "Button" Then
'nasconde il pulsante
shp.Visible = msoFalse
Else
End If
End If
Next
End Sub
----------------------------------------------
Per ricercare i dati delle forme utilizzo:
-----------------------------------------------
Sub z_nomi_delle_forme()
Dim shp As Shape
Dim conta
conta = 1
For Each shp In ActiveSheet.Shapes
Debug.Print "Forma nr." & conta & " " & shp.Name
Debug.Print shp.Name
Debug.Print "da sinistra " & shp.Left
Debug.Print "finestra " & shp.Width
Debug.Print "top " & shp.Top
Debug.Print "altezza " & shp.Height
Debug.Print "----------------------------"
conta = conta + 1
Next
End Sub
-----------------------------------------------
-
Ciao Tullio,
vedo che oltre la macro z_FORME () hai altre valide macro per un debug del codice. Per risolvere il problema, se è vero che la z_FORME () ti cancella anche le celle di convalida ti consiglierei di usare z_nomi_delle_forme () per vedere se tra gli oggetti che stampi nella finestra immediata riconosci le celle incriminate e notare se queste vengono riconosciute come Shapes.
Se è così, prima di cancellare la forma puoi usare la tecnica che hai usato in Pulsanti_invisibili ():
If Left(nameshp, xx) = "yyyyyy" Then
Non ho potuto provare con celle di convalida, ma penso che, se riesci a capire che tali celle vengano individuate come Shapes, possano essere salvate.
Io ho provato con del semplice testo nel foglio e numerosi tipi di Shapes e non è successo nulla di indesiderato.
Ecco come modificherei la sub z_FORME()
Sub z_FORME()
Dim shp As Shape
Dim nameshp As String
For Each shp In ActiveSheet.Shapes
nameshp = shp.Name
If Left(nameshp, x) <> "yyyyyy" Then
shp.Delete
End If
Next shp
End Sub
-
Ciao micdas,
allora:
la ricerca dei nomi delle forme l'avevo già fatta in quel modo ma non mi dava alcun risultato, però la tua riflessione mi ha fatto considerare una cosa; la selezione della casella! Ebbene :Felici81: se la casella di convalida è selezionata allora la riconosce anche nel nome e per informazione si chiama "Drop Down" altrimenti non la riconosce però con shp.delete la cancella ugualmente.
Come al solito :Party133: e grazie.
Tullio
-
Perfetto :Amm9: