cancellare un oggetto button
Hai un problema con Excel? 
cancellare un oggetto "button"
di Max (utente non iscritto) data: 07/10/2017 10:37:53
Buongiorno a tutti.
Come posso cancellare un oggetto "button" contenuto in una cella specifica senza conoscere quale numero sia stato attribuito alla sua creazione?
il codice che ho realizzato fino a questo momento genera 5 righe popolate da dati calcolati e, nell'ultima colonna (per ciascuna riga), genera un link ad un file pdf (uno per ciascuna riga).
Quando viene eseguito il codice principale vengono elaborate soltanto le prime 2 righe (semplicemente perchè ho soltanto i dati per generare i primi 2 pdf) nelle altre 3 celle il codice mi genera un oggetto "Button" collegato ad un'altra macro che dovrà, quando eseguito il relativo codice, cancellare l'oggetto "Button" e sostituirlo con il link al 3° file pdf.
Ora, ogni volta che il codice principale genera gli oggetti "Button" attribuisce un numero progressivo (nel caso evidenziato quindi mi servirebbe la possibilità di individuare in una cella specifica il nome dell'oggetto "Button" contenuto e usarlo per cancellarlo.
Se quello che scrivo sembra confuso è perchè io lo sono.
Max
ActiveSheet.Shapes.Range(Array("Button 35")).Select
Selection.Delete
|
di patel data: 07/10/2017 11:37:09
come minimo dovresti mostrare il codice che usi per generare i buttons
cancellare un oggetto "button"
di Max (utente non iscritto) data: 07/10/2017 11:48:01
eccolo.
Range("L3").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=nPath & nF24file & ".pdf", TextToDisplay:=nF24file & ".pdf"
Range("L4").Select
ActiveSheet.Buttons.Add(1055.25, 168, 182.25, 28.5).Select
Selection.OnAction = "inseriscepdf"
Selection.Characters.Text = "Inserisce PDF"
|
di patel data: 07/10/2017 19:34:22
conviene associare i pulsanti alle celle, vedi esempio
Sub buttonsadd()
Dim btn As Button
ActiveSheet.Buttons.Delete
Dim t As Range
For i = 2 To 6 Step 2
Set t = ActiveSheet.Cells(3, i)
Set btn = ActiveSheet.Buttons.Add(t.Left, t.Top, t.Width, t.Height)
With btn
.OnAction = "btnS"
.Caption = "Btn " & i
.Name = "Btn" & i
End With
Next i
End Sub
Sub btnS()
MsgBox Application.Caller
End Sub
Sub cancellaB3()
For Each but In ActiveSheet.Buttons
If but.Left = Range("B3").Left Then but.Delete
Next
End Sub
|
cancellare un oggetto "button"
di Max (utente non iscritto) data: 08/10/2017 11:15:51
Grazie a Patel per la soluzione.
Ma, se ho capito il codice, nel mio caso non è sufficiente perchè, per ogni inserimento, genero 5 righe nella parte superiore del foglio, spostando quelle preesistenti in basso, quindi i Button vengono generati sempre alle medesime coordinate (L4, L5 ed L6) e, se li genero con il nome della cella avrei ricorsivamente gli stessi nomi.
Grazie
Max
di patel data: 08/10/2017 12:27:01
tu non mi hai allegato tutto il codice che usi, io non sono indovino.
Comunque devi tener conto delle coordinate dei buttons che crei e poi eliminare quelli che vuoi basandoti su button.left o button.top, il concetto è lo stesso.
tieni presente che la riga
Range("L4").Select
presente nel codice che hai allegato è perfettamente inutile, tu stai usando coordinate grafiche indipendenti dalle celle.
Vuoi Approfondire?