Pulsante dinamico e macro

di il
12 risposte

Pulsante dinamico e macro

Salve a tutti, eccomi con un altro quesito:

apro il mio bel file Excel e compare la mia bella userform con i vari comandi e le varie opzioni tra cui: “ESCI” che nasconde e chiude la userform ("Me.Hide" e UnLoad me") per premettermi di navigare nella tabella senza la rottura della form.

Il mio quesito: avrei necessità di far riapparire la form e ho inserito il seguente pulsante con codice:

    ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=5.5, Top:=19.5, Width:=102.5, Height:=27.5).Select
    With ActiveWorkbook.ActiveSheet.CommandButton1
        .Caption = "MENU"
        .ForeColor = RGB(255, 165, 95)
        .BackColor = RGB(255, 255, 0)
        With .Font
           .Name = "Tahoma"
           .Size = 16
           .Bold = True
        End With
    End With

Come faccio a collegarlo ad una sub (o altro)? 

Sub CommandButton1_Click()

  frmMain.Show

End Sub

questo codice l'ho scritto nello stesso modulo in cui ci sono le righe precedenti che lo creano.

Grazie e a presto.

12 Risposte

  • Re: Pulsante dinamico e macro

    19/05/2023 - joker7421 ha scritto:


    “ESCI” che nasconde e chiude la userform ("Me.Hide" e UnLoad me") per premettermi di navigare nella tabella senza la rottura della form.

    Ciao,

    ma secondo te ha senso nascondere e chiudere la UserForm ?

    O la Nascondi o la Chiudi…. delle due una, non ti pare?

    19/05/2023 - joker7421 ha scritto:


    Il mio quesito: avrei necessità di far riapparire la form e ho inserito il seguente pulsante con codice:

    Quando inserisci un Pulsate nel foglio di lavoro ed ad esso vuoi associare l'apertura di una form, devi scegliere il Pulsante dai Controlli ActiveX

    • Inserire Pulsante nel Foglio
      • Controlli ActiveX  Pulsante di comando
        • posizionare il Pulsante nel Foglio di Lavoro
    • Click Destro sul Pulsante 
      • Proprietà
        • impostare i valori desiderati
    • Click Destro sul Pulsante
      • Visualizza Codice
        • Nella Sub che ha generato scrivere il codice: frmMain.Show

    Basta !

    non serve altro. ;)

  • Re: Pulsante dinamico e macro

    19/05/2023 - joker7421 ha scritto:


    Il mio quesito: avrei necessità di far riapparire la form e ho inserito il seguente pulsante con codice:

        ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=5.5, Top:=19.5, Width:=102.5, Height:=27.5).Select
        With ActiveWorkbook.ActiveSheet.CommandButton1
            .Caption = "MENU"
            .ForeColor = RGB(255, 165, 95)
            .BackColor = RGB(255, 255, 0)
            With .Font
               .Name = "Tahoma"
               .Size = 16
               .Bold = True
            End With
        End With
    

    Come faccio a collegarlo ad una sub (o altro)? 

    Questo non serve… inutile se non hai necessità di cambiare di volta in volta le impostazioni delle proprietà del Pulsante.

    Se tali impostazioni rimangono fisse è sufficiente impostarle nelle Proprietà del Pulsante come ti ho descritto nel precedente Post.

    ;)

  • Re: Pulsante dinamico e macro

    19/05/2023 - By65Franco ha scritto:


    O la Nascondi o la chiudi…. delle due una, non ti pare?

    Hai perfettamente ragione … è una stupidaggine che volevo lasciarmi alla fine, quando farò una pulizia del codice.

    Ogni foglio viene creato runtime in base a delle impostazioni che l'utente immette.

    Appena si apre il file (inizialmente composto da un solo foglio contenente un pulsante come suggerito da te) appare una userform (tipo menù delle scelte) dove l'utente può creare delle griglie (fogli). Una volta terminate le operazioni di creazione e/o esportazione e/o salvataggio, l'utente può nascondere questa userform per visionare ed interagire con le griglie. A questo punto vorrei che quel pulsante creato precedentemente con il codice che ho postato, potesse eseguire la semplice istruzione di (ri)apertura della userform di prima.

    In ogni caso, Franco, grazie per la tua pazienza e disponibilità.

    ciao e a presto

  • Re: Pulsante dinamico e macro

    20/05/2023 - joker7421 ha scritto:


    19/05/2023 - By65Franco ha scritto:


    O la Nascondi o la chiudi…. delle due una, non ti pare?

    Hai perfettamente ragione … è una stupidaggine che volevo lasciarmi alla fine, quando farò una pulizia del codice.

    Ogni foglio viene creato runtime in base a delle impostazioni che l'utente immette.

    Appena si apre il file (inizialmente composto da un solo foglio contenente un pulsante come suggerito da te) appare una userform (tipo menù delle scelte) dove l'utente può creare delle griglie (fogli). Una volta terminate le operazioni di creazione e/o esportazione e/o salvataggio, l'utente può nascondere questa userform per visionare ed interagire con le griglie. A questo punto vorrei che quel pulsante creato precedentemente con il codice che ho postato, potesse eseguire la semplice istruzione di (ri)apertura della userform di prima.

    In ogni caso, Franco, grazie per la tua pazienza e disponibilità.

    ciao e a presto

    Capito,

    ma quando crei il pulsante e vuoi per esso scrivere del codice, devi usare i Controlli ActiveX e non i Controlli Modulo che consento solo di assegnare delle Macro e in più l'utente, con il click destro, questo tipo di pulsante lo può sempre modificare.

    Usa solo i Controlli ActiveX se devi poi scrivere il codice da eseguire per essi.

    ciao

  • Re: Pulsante dinamico e macro

    Scusate la mia assenza … ho risolto

    Ho usato un Pulsante Controllo Modulo e gli ho assegnato una Macro/Sub scritta nello stesso modulo dove ho scritto il codice che mi crea il pulsante. L'unico svantaggio è quello di non poter cambiare lo sfondo del pulsante. (qualche consiglio?)

    In questo modo ho creato il pulsante:

        '
        'Inserimento pulsante di controllo modulo
        '
        ActiveSheet.Buttons.Add Range("A1").Left, Range("A1").Top, Range("A1").Width, Range("A1").Height
        ActiveSheet.Buttons.Select
        Selection.OnAction = "Menu"
        Selection.Caption = "MENU"
        Selection.Font.Name = "Tahoma"
        Selection.Font.Size = 14
        Selection.Font.Bold = True
        Selection.Font.Color = RGB(255, 165, 95)
    

    e questa è la sub/macro

    Sub Menu()
      frmMain.Show
    End Sub

    Grazie per l'aiuto e per i consigli e soprattutto per la pazienza.

    Alla prossima domanda 

  • Re: Pulsante dinamico e macro

    21/05/2023 - joker7421 ha scritto:


    L'unico svantaggio è quello di non poter cambiare lo sfondo del pulsante. (qualche consiglio?)

    Secondo me lo fai apposta…

    Ti ho appena detto di non usare i pulsanti e/o altri controlli di tipo Modulo e di utilizzare i Controlli ActiveX 

    Non lo fai, non prendi in considerazione il suggerimento e soluzione  e poi chiedi consiglio su come modificare un pulsante di Modulo che non può essere modificato per talune caratteristiche ?

    Senza necessità alcuna e quindi inutilmente, inserisci del codice per impostare un pulsante quando tecnicamente è sufficiente impostare il tutto nelle proprietà dello stesso.

    Che senso ha replicare, scrivendo delle righe inutili di codice, ciò che il sistema già fa nativamente? solo per rallentare i processi e appesantire inutilmente il codice in fase di esecuzione? 

    E' evidente che i controlli ActiveX non sai cosa sono, perchè esistono e a cosa servono e quando e come utilizzarli.

    Crei un Post con una richiesta per poi fare tutto il contrario di come dovrebbe essere fatto.

    Aprire dei Post così… inutilmente che senso ha? a cosa serve? se poi continui a fare di testa tua senza approfondire, senza studiare e soprattutto senza nessuna logica, a cosa porta tutto ciò? 

    A questo punto evita di aprire Post così inutili…. o no?

    Ecco, ciò che stai facendo è la rappresentazione di tutto quello che non va fatto. Mah… 
    meglio lasciar perdere, solo perdita di tempo.

    Anche il titolo stesso del Post è fuori luogo e sbagliato… Di "dinamico" non c'è proprio nulla e in più dovresti modificarlo in “Come Non Utilizzare delle Macro”

    Per inciso, poi quello che stai facendo non ha nulla a che vedere con le Macro… e tutta altra cosa, tanto per essere chiari ed esaustivi. Le macro sono tutt'altra cosa sia come come concetti e loro utilizzo.

  • Re: Pulsante dinamico e macro

    Secondo me lo fai apposta…

    Sì, lo faccio apposta a capire, a sbagliare, a ricapire e a risbagliare. Solo sbagliando si riesce, poi, ad arrivare ad una soluzione valida.

    Ti ho appena detto di non usare i pulsanti e/o altri controlli di tipo Modulo e di utilizzare i Controlli ActiveX 

    Non lo fai, non prendi in considerazione il suggerimento e soluzione  e poi chiedi consiglio su come modificare un pulsante di Modulo che non può essere modificato per talune caratteristiche ?

    Ti assicuro che ho provato e riprovato a seguire i tuoi consigli  ed i tuoi suggerimenti ma non ne sono venuto a capo: andavo a sbattere sempre sullo stesso problema.
    All'apertura del file, si apre il menu che mi permette di creare un nuovo foglio; una volta creato il nuovo foglio, il menu scompare per permettermi di agire sul nuovo foglio. Vorrei che in questo foglio fosse presente un pulsante ActiveX (ti assicuro che anche io preferisco i controlli ActiveX) che mi permetta di richiamare il menu che precedentemente si è chiuso.
    Il controllo ActiveX l'ho facilmente creato (come ho scritto nel primo post), il problema, che ho sempre avuto fin dall'inizio, è far interagire il pulsante con il codice.

    Quello che hai scritto nella 2ª risposta:

    Quando inserisci un Pulsate nel foglio di lavoro ed ad esso vuoi associare l'apertura di una form, devi scegliere il Pulsante dai Controlli ActiveX

    • Inserire Pulsante nel Foglio
      • Controlli ActiveX  Pulsante di comando
        • posizionare il Pulsante nel Foglio di Lavoro
    • Click Destro sul Pulsante 
      • Proprietà
        • impostare i valori desiderati
    • Click Destro sul Pulsante
      • Visualizza Codice
        • Nella Sub che ha generato scrivere il codice: frmMain.Show

    Basta !

    non serve altro. ;)

    l'ho già fatto per creare i vari pulsanti del MENU. Il foglio di lavoro su cui voglio creare il pulsante, è creato con il codice dopo il click dell'utente.
    Come faccio ad associare il click di un pulsante ActiveX creato con il codice con il relativo codice scritto in un modulo o nel foglio di lavoro?

    Come vedi, da parte mia c'è solo voglia di imparare, anche dagli errori. Non voglio prendere in giro nessuno e tantomeno voglio mancare di rispetto a qualcuno. Potevo tranquillamente abbandonare il thread (tanto ho risolto il problema) ma era mia intenzione continuare a confrontarmi con te o con altri (speravo con meno acredine).

    Ti rinnovo i ringraziamenti per l'aiuto e per i consigli e soprattutto per la pazienza che spero tu non abbia perso.

    Buona serata

  • Re: Pulsante dinamico e macro

    Ciao,

    Nessun problema in merito… ci mancherebbe ;)

    Un sistema comodo e sicuro, ma soprattutto semplice semplice è quello di:

    • creare un Foglio che fa da Modello per i nuovi fogli da Creare
      • è un foglio di comodo che serve solo per essere replicato con tutti le formattazioni, informazioni e controlli in esso contenuti. Tale e uguale a come vuoi che debba risultare il nuovo foglio da creare
      • questo foglio di lavoro lo puoi tenere Nascosto e attivarlo solo per la copia e quindi per la creazione del nuovo Foglio di Lavoro
    Sheets("FoglioDaCopiare").Visible = True      			' rendi visibile il foglio da copiare
    Sheets("FoglioDaCopiare").Copy After:=Sheets(1)			' copia il foglio che fa da modello in un nuovo foglio
    Sheets("FoglioDaCopiare").Visible = False				' nascondi il foglio da copiare

    In questo esempio si è Creato un Modello di comodo di nome FoglioDaCreare
    Per proteggerlo si Nasconde e lo si rende disponibile solo nel caso si debba Copiarlo per Creare un Nuovo Foglio di Lavoro
    Tutti i contenuti di questo Foglio vengono Copiati in un nuovo Foglio di Lavoro 

    Pertanto nel nuovo foglio di lavoro ti ritrovi anche il controllo Pulsante che comanderà l'apertura della tua Form

    Nella Form, quando viene richiesto di generare un nuovo foglio di lavoro, sarà sufficiente far eseguire le 3 righe di codice sopra riportate.

    E come già detto nei post precedenti, a tale pulsante sarà associata l'esecuzione di OpenUserForm.

    Un metodo dei tanti, veloce, sicuro e implementabile a proprio piacimento, ma con solo 3 righe di codice, semplice semplice… ;)

    Del resto il controllo Pulsante già esiste ed è superfluo ricrearlo tutte le volte…. basta farlo una volta sola, e non da codice che è un inutile perdita di tempo, ma su un foglio di comodo che rispecchierà ciò che vorrai ottenere nel nuovo foglio di lavoro.
    Questo è un semplice consiglio che posso darti se ho capito bene la tua esigenza.

  • Re: Pulsante dinamico e macro

    Ti ringrazio ancora By65Franco, purtroppo in questi giorni non riesco a stare al PC quanto vorrei.
    Spero non ti spazientisca … appena ho un'oretta provo l'ultimo tuo suggerimento, anche se questo lo vedo più tosto da mettere in pratica.

    Grazie e spero a presto.

  • Re: Pulsante dinamico e macro

    Eccomi … finalmente sono riuscito ad avere un po' di tempo per me.

    Mi creo il pulsante ActiveX nel “Foglio1” che userò come modello

    poi:

    
    'Crea un nuovo foglio
    
    Sub NewSheet(anno As Integer)
    
        Dim l As Integer
        l = ActiveWorkbook.Sheets.Count
    '    Sheets("FoglioDaCopiare").Visible = True           ==== non ho necessità di nasconderlo
        ActiveWorkbook.Sheets("Foglio1").Copy after:=Sheets(l)          ' copia il foglio che fa da modello in un nuovo foglio
    
    '    Sheets("FoglioDaCopiare").Visible = False          ==== non ho necessità di nasconderlo
        ActiveWorkbook.Sheets(l).Name = "nome foglio"
    End Sub
    

    Ogni nuovo foglio che si creerà, avrà come modello il primo foglio che ha un pulsante per il MENU con il relativo codice

    Private Sub btnMenu_Click()
    
    	frmMain.Show
    
    End Sub

    Spero sia questo, quello che cercavi di farmi capire.

    Grazie ancora e a presto.

  • Re: Pulsante dinamico e macro

    28/05/2023 - joker7421 ha scritto:


    Eccomi … finalmente sono riuscito ad avere un po' di tempo per me.

    Mi creo il pulsante ActiveX nel “Foglio1” che userò come modello

    poi:

    
    'Crea un nuovo foglio
    
    Sub NewSheet(anno As Integer)
    
        Dim l As Integer
        l = ActiveWorkbook.Sheets.Count
    '    Sheets("FoglioDaCopiare").Visible = True           ==== non ho necessità di nasconderlo
        ActiveWorkbook.Sheets("Foglio1").Copy after:=Sheets(l)          ' copia il foglio che fa da modello in un nuovo foglio
    
    '    Sheets("FoglioDaCopiare").Visible = False          ==== non ho necessità di nasconderlo
        ActiveWorkbook.Sheets(l).Name = "nome foglio"
    End Sub
    

    Ogni nuovo foglio che si creerà, avrà come modello il primo foglio che ha un pulsante per il MENU con il relativo codice

    Private Sub btnMenu_Click()
    
    	frmMain.Show
    
    End Sub

    Spero sia questo, quello che cercavi di farmi capire.

    Grazie ancora e a presto.

    Diciamo proprio di si…. come vedi con due istruzioni fai tutto 

    I nuovi fogli che crei dipenderanno da come e cosa hai stabilito nel foglio che fa da modello

    In questo puoi sempre impostare tutte le formattazioni e controlli che vuoi portarti dietro nei nuovi fogli da creare.

    Penso che con il minimo sforzo si riesca ad ottenere il massimo con estrema facilità evitando di scrivere noiose righe di codice.

    Insomma… il concetto che volevo passarti era questo.

    Bene… Buon lavoro
    Ciao 

  • Re: Pulsante dinamico e macro

    Grazie ancora e al prossimo dubbio.

Devi accedere o registrarti per scrivere nel forum
12 risposte