cancellare un oggetto button



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