Condividi tramite

Rinomina pulsanti

Anonimo
2022-12-08T22:04:44+00:00

Salve,

In un Foglio Excel ho circa 50 pulsanti di comando associati a delle macro. Poiché sono stati creati in tempi differenti ed eliminandone qualcuno e aggiungendone qualche altro, i pulsanti non hanno nomi in sequenza Pulsante 1, Pulsante 2... e non riesco a cambiare i nomi per metterli tutti in sequenza.

Come potrei fare per gestire i loro nomi in modo di averli tutti in sequenza Pulsante 1, Pulsante 2...Pulsante 50?

Grazie per l'aiuto.

Giuseppe

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2022-12-09T12:49:19+00:00

    Ciao Giuseppe,

    Ho richiesto un file di esempio perché credo che potrebbe essere possibile assegnare tutti i pulsanti a una singola macro e potrebbe quindi non essere necessario rinominare i 50 pulsanti esistenti.

    Tuttavia, in attesa di una tua risposta, per rinominare i pulsanti e la loro didascalia in ordine sequenziale, prova come segue:

    '========>>

    Option Explicit

    '-------->>

    Public Sub Tester()

    Dim SH As Worksheet 
    
    Dim arrNames() As Variant, arrCaptions As Variant 
    
    Dim arrTop() As Variant, arrSort() As Variant 
    
    Dim Res As Variant 
    
    Dim i As Long, j As Long, k As Long 
    
    Const sFoglio As String = **"Foglio1"             '<<=== Modifica** 
    
    Set SH = ThisWorkbook.Sheets(sFoglio) 
    
    i = SH.Buttons.Count 
    
    ReDim arrNames(1 To i) 
    
    ReDim arrCaptions(1 To i) 
    
    ReDim arrTop(1 To i) 
    
    ReDim arrSort(1 To i) 
    
    For j = 1 To i 
    
        With SH.Buttons(j) 
    
            arrNames(j) = .Name 
    
            arrCaptions(j) = .Caption 
    
            arrTop(j) = .Top 
    
        End With 
    
    Next j 
    
    arrSort = SortedArrayList(arrTop) 
    
    For k = 0 To UBound(arrSort) 
    
        Res = Application.Match(arrSort(k), arrTop, 0) 
    
        With SH.Buttons(Res) 
    
            SH.Buttons(Res).Name = "Pulsante " & k + 1 
    
            .Caption = "Pulsante " & k + 1 
    
        End With 
    
    Next k 
    

    End Sub

    '--------->>

    Public Function SortedArrayList(V As Variant)

    Dim oSortedArrayList As Object 
    
    Dim i As Long 
    
    Set oSortedArrayList = CreateObject("System.Collections.ArrayList") 
    
    With oSortedArrayList 
    
        For i = 1 To UBound(V) 
    
            .Add V(i) 
    
        Next i 
    
        .Sort 
    
        SortedArrayList = .toarray 
    
    End With 
    

    End Function

    '<<========

    Ho eseguito questo codice sul seguente foglio di prova con 50 pulsanti in ordine di nome casuale:

    Dopo aver eseguito il codice, il mio foglio appariva così:

    Potresti scaricare il mio file di prova Giuseppe20221209.xlsm

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    2 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2022-12-09T10:54:51+00:00

    Ciao Giuseppe,

    Ciao Norman e ben ritrovato.

    Grazie della tua risposta.

    In realtà i pulsanti mi servono per un tuo codice che scopre/ nasconde dei gruppi di righe. I gruppi di righe da nascondere sono in più fogli ma sono sempre gli stessi gruppi di righe da nascondere/scoprire. Per cui in ogni foglio ho pulsante 1, pulsante 2... Pulsante n, e ciascuno scopre/nasconde differenti gruppi di righe (A10:A15 - A20:A15....). Uso i pulsanti e la tua macro associata da tempo e tutto funziona molto bene.

    Le cose si sono complicate perché ho aggiunto altri gruppi di righe (circa 50) da nascondere nei vari fogli. Creando nuovi pulsanti ho perso la sequenza e ciò mi rende complicato inserire in modo ordinato nel codice i gruppi di righe da nascondere/scoprire per ogni nome di pulsante (button 1...button n). Perciò vorrei riordinarli in base alla loro posizione sul foglio essendo tutti i pulsanti nella stessa colonna a distanza di 60 righe l'uno dall'altro.

    Ti ringrazio per la spiegazione.

    Sarebbe di grande aiuto se potessi caricare il tuo file, dopo aver sostituito i tuoi dati con dati fittizi.

    Per caricare il file su Microsoft OneDrive, vedi:

       Condividere file e cartelle di OneDrive

    Per caricare il file su DropBox, vedi:

    Come faccio a condividere file e cartelle in Dropbox?

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2022-12-09T10:31:40+00:00

    Ciao Norman e ben ritrovato.

    Grazie della tua risposta.

    In realtà i pulsanti mi servono per un tuo codice che scopre/ nasconde dei gruppi di righe. I gruppi di righe da nascondere sono in più fogli ma sono sempre gli stessi gruppi di righe da nascondere/scoprire. Per cui in ogni foglio ho pulsante 1, pulsante 2... Pulsante n, e ciascuno scopre/nasconde differenti gruppi di righe (A10:A15 - A20:A15....). Uso i pulsanti e la tua macro associata da tempo e tutto funziona molto bene.

    Le cose si sono complicate perché ho aggiunto altri gruppi di righe (circa 50) da nascondere nei vari fogli. Creando nuovi pulsanti ho perso la sequenza e ciò mi rende complicato inserire in modo ordinato nel codice i gruppi di righe da nascondere/scoprire per ogni nome di pulsante (button 1...button n). Perciò vorrei riordinarli in base alla loro posizione sul foglio essendo tutti i pulsanti nella stessa colonna a distanza di 60 righe l'uno dall'altro.

    Spero di essere riuscito ad essere chiaro.

    Grazie ancora.

    Giuseppe

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2022-12-09T09:10:06+00:00

    Ciao Giuseppe,

    Avrei dovuto chiedere perché vuoi o hai bisogno di cambiare i nomi dei pulsanti poiché la tua risposta potrebbe aver alterato la mia risposta.

    Quindi, ad esempio, se lo scopo della tua richiesta fosse puramente quello di vedere solo pulsanti con didascalie consecutive, sarebbe sufficiente modificare la proprietà Caption dei pulsanti. Se invece il tuo obiettivo fosse vedere i pulsanti nel loro ordine di didascalia, il codice dovrebbe essere riscritto. In alternativa, se lo scopo era identificare il pulsante attivo quando viene premuto, si potrebbero ignorare i nomi dei pulsanti correnti e sfruttare la proprietà Application.Caller.

    Sarebbe stato anche interessante sapere se tutti i pulsanti risiedessero su un singolo foglio poiché Excel considera i pulsanti di ciascun foglio come una raccolta distinta e separata.

    In sintesi, più informazioni fornisci, si spera con una cartella di lavoro di esempio. meglio possiamo aiutarti! 😊

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2022-12-09T07:47:31+00:00

    Ciao Giuseppe,

    In un Foglio Excel ho circa 50 pulsanti di comando associati a delle macro. Poiché sono stati creati in tempi differenti ed eliminandone qualcuno e aggiungendone qualche altro, i pulsanti non hanno nomi in sequenza Pulsante 1, Pulsante 2... e non riesco a cambiare i nomi per metterli tutti in sequenza.

    Come potrei fare per gestire i loro nomi in modo di averli tutti in sequenza Pulsante 1, Pulsante 2...Pulsante 50?

    Non hai indicato se devi solo modificare i nomi o modificare anche le didascalie dei pulsanti, ma la seguente procedura eseguirà entrambe le attività:

    '========>>

    Option Explicit

    '-------->>

    Public Sub Tester()

    Dim SH As Worksheet 
    
    Dim oButton As Button 
    
    Dim iCtr As Long 
    
    For Each SH In ThisWorkbook.Worksheets 
    
        For Each oButton In SH.Buttons 
    
            iCtr = iCtr + 1 
    
            With oButton 
    
            .Name = "Pulsante " & iCtr 
    
            .Caption = .Name 
    
            End With 
    
        Next oButton 
    
    Next SH 
    

    End Sub

    '<<========

    Nota che, nel modo in cui è scritto il codice, i pulsanti su ogni foglio verranno rinominati in base alla sequenza in cui sono stati aggiunti al foglio e indipendentemente dalla loro posizione fisica.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento