Chiamata sub da ribbon

di il
12 risposte

Chiamata sub da ribbon

Ho un piccolo problema.
Sicuramente è uno di quelli che ti fanno arrovellare il cervello per una settimana per poi scoprire che è una baggianata.
Dall'ultima volta che ho creato una ribbon sono passati eoni di tempo.
Però spulciando la documentazione, mi sembra di aver eseguito la procedura giusta.

Se uso una normale macro, funziona tutto alla perfezione, ma vorrei gestire in modo più organico usando VBa, per non avere decine di macro di richiamata.

Pulsante di una ribbon che richiama una sub per eseguire il relativo comando.

questo è l'xml 

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon startFromScratch="false">
  <tabs>
   <tab id="Tab1" label="Prova"  >
        <group id="Grp1" label="Gruppo1">
               <button id="btn1" size="large" label="Bottone 1" imageMso="OutlookSearchOptions" onAction="prova" supertip="descrizione estesa"/>

        </group>
   
   </tab>

      </tabs>
   </ribbon>

</customUI>

questo è il codice inserito in un modulo

Sub prova()
MsgBox "prova"

End Sub

ho provato anche 

Sub prova (control As IRibbonControl)
    ......
    End Select
End Sub

messaggio di errore:

-Impossibile eseguire la macro o la funzione di richiamata ”prova"-

Verificare che la funzione esista o che i parametri siano corretti

Dove scappello?
Grazie

12 Risposte

  • Re: Chiamata sub da ribbon

    Quella sub non è public. È possibile che ne stai chiedendo l'esecuzione al di fuori del modulo dove è definita?

  • Re: Chiamata sub da ribbon

    27/05/2023 - Antony73 ha scritto:


    Quella sub non è public. È possibile che ne stai chiedendo l'esecuzione al di fuori del modulo dove è definita?

    Facendo le prove l'ho dichiarata anche public in un modulo, ho provato anche in un modulo di classe.
    Sempre lo stesso errore.

    Ho provato anche a richiamarla da una form con un pulsante e funziona senza problemi.

    Solo la chiamata da ribbon non lo vede.

  • Re: Chiamata sub da ribbon

    Ciao fratac,

    io ho provato questo che è un esempio di microsoft support e mi funziona:

    <tab id="TabHome" label="Home">
        <group id="Group1" label="My Group">
            <button id="myButton" label="My Button" size="large" onAction="MySub" />
        </group>
    </tab>

    e in un modulo:

    Public sub MySub(ctl As IRibbonControl)
    	...
    	..
    	.
    End sub
  • Re: Chiamata sub da ribbon

    Ciao fratac
    almeno due sono i motivi che causano l'errore: 

    • libreria nei riferimenti Mancante
    • parametro oggetto controllo mancante nella Sub o Function da eseguire

    Controlla:

    1. Vba/Strumenti/Riferimenti Includere la libreira: Microssoft Office xx.x Object Library
    2. In un modulo scrivere la sub come Public con il parametro IRibbonControl
    Option Explicit
    Option Compare Database
    
    Public Sub TuoNomeSub(ctl As IRibbonControl)      … che corrisponde al nome in onAction="TuoNomeSub" 
    	....
    	...
    	..
    End Sub

    Ricordarsi sempre di chiudere e riaprire Access ogni volta che viene modificato l' Xml nella tabella USysRibbons in modo che possa ricaricare il nuovo codice per la Ribbon


    Per scrivere l'Xml trovi diverse Info utili Qui

  • Re: Chiamata sub da ribbon

    28/05/2023 - By65Franco ha scritto:


    Ciao fratac
    almeno due sono i motivi che causano l'errore: 

    • libreria nei riferimenti Mancante
    • parametro oggetto controllo mancante nella Sub o Function da eseguire

    Controlla:

    1. Vba/Strumenti/Riferimenti Includere la libreira: Microssoft Office xx.x Object Library
    2. In un modulo scrivere la sub come Public con il parametro IRibbonControl
    Option Explicit
    Option Compare Database
    
    Public Sub TuoNomeSub(ctl As IRibbonControl)      … che corrisponde al nome in onAction="TuoNomeSub" 
    	....
    	...
    	..
    End Sub

    Ricordarsi sempre di chiudere e riaprire Access ogni volta che viene modificato l' Xml nella tabella USysRibbons in modo che possa ricaricare il nuovo codice per la Ribbon


    Per scrivere l'Xml trovi diverse Info utili Qui

    Lo sapevo che era una di quelle sviste che ti fanno perdere settimane di tempo.

    Avevo attivato i riferimenti a Microsoft access XX e non quelli relativi ad office che gestiscono le ribbon sull'intero pacchetto office.
    Infatti quando andavo a dichiarare Iribboncontrol non me li dava da tra i suggeriti.

    Grazie per avermi fatto ricontrollare i riferimenti.

    La vecchiaia……

    Comunque, giusto per informazione, non è obbligatorio di dichiarare public la sub, visto che si trova in un modulo.

  • Re: Chiamata sub da ribbon

    28/05/2023 - fratac ha scritto:


    Lo sapevo che era una di quelle sviste che ti fanno perdere settimane di tempo.

    Avevo attivato i riferimenti a Microsoft access XX e non quelli relativi ad office che gestiscono le ribbon sull'intero pacchetto office.
    Infatti quando andavo a dichiarare Iribboncontrol non me li dava da tra i suggeriti.

    Grazie per avermi fatto ricontrollare i riferimenti.

    La vecchiaia……

    e vabbè… allora siamo in due, abbiamo le connessioni da ricablare, ste' sinapsi se 'so logorate con il tempo.  ahahahahaahahahahaha

    Non sai e non te dico quanto tempo ci ho messo per ricreare l'errore. Poi all'improvviso un contatto si è ripristinato e allora ho capito ;D

    Però adesso mi hai fatto venire voglia di utilizzare anche ste ribbon…. mmmmm , vedremo. ;))
    Ciao…

  • Re: Chiamata sub da ribbon

    28/05/2023 - By65Franco ha scritto:


    28/05/2023 - fratac ha scritto:


    Lo sapevo che era una di quelle sviste che ti fanno perdere settimane di tempo.

    Avevo attivato i riferimenti a Microsoft access XX e non quelli relativi ad office che gestiscono le ribbon sull'intero pacchetto office.
    Infatti quando andavo a dichiarare Iribboncontrol non me li dava da tra i suggeriti.

    Grazie per avermi fatto ricontrollare i riferimenti.

    La vecchiaia……

    e vabbè… allora siamo in due, abbiamo le connessioni da ricablare, ste' sinapsi se 'so logorate con il tempo.  ahahahahaahahahahaha

    Non sai e non te dico quanto tempo ci ho messo per ricreare l'errore. Poi all'improvviso un contatto si è ripristinato e allora ho capito ;D

    Però adesso mi hai fatto venire voglia di utilizzare anche ste ribbon…. mmmmm , vedremo. ;))
    Ciao…

    Il bello di tutto ciò è che mi ero documentato ed avevo attivato i riferimenti.
    Ero convinto di aver attivato i riferimenti giusti
    Praticamente dal primo codice che avevo scritto era tutto corretto, tranne la svista che mi ha mandato in palla.
    poi ho cominciato a modificare il codice e mi si sono aggiunti ulteriori errori.

    Quando mi hai fatto venire in mente di ricontrollare i riferimenti, mi sono accorto della svista.

    Le ribbon sono potenti, ma personalmente le trovo troppo macchinose.

    Praticamente per usarle, oltre a doversi studiare L' XML specifico per loro, bisogna avere un editor esterno per scrivere l' XML, visto che se provi a fare delle modifiche direttamente nel campo della tabella di access, esce fuori un pastrocchio.
    Ad ogni modifica bisogna chiudere e riaprire il database.
    Molte volte anche con questa operazione, il menù personalizzato non parte e bisogna chiudere del tutto access e riaprirlo.

    Bisogna modificare i parametri in opzione di spostamento del database e visualizzare gli elementi nascosti e di sistema.

    Se c'è un errore, il menù non si attiva e per sapere che tipo di errore c'è bisogna modificare un ulteriore valore nelle opzioni database.

    Bisogna creare macro, a volte molto lunghe per gestire i menù, oppure usare il vba, con codici a volte molto lunghi, a meno che non si gestiscano con un modulo di classe che fa diminuire il codice, ma dove bisogna avere una certa dimestichezza con le classi.

    Se si devono aggiungere immagini personalizzate e non quelle di sistema, non potendo usare un file di risorse, come esisteva nel VB6 (quanto lo trovavo comodo) bisogna essere dei funamboli, sia nella scelta di inserimento che nella gestione. O si usano immagini esterne con tutto quello che concerne le complicazioni nella distribuzione del database, oppure incorporarle, a discapito della grandezza del database.

    Se si aprono due database contemporaneamente che usano una ribbon personalizzata con lo stesso nome, si attiva l'errore che la ribbon è già in uso e quindi non si attiva.

    Praticamente mezz'ora di lavoro e svariate rogne per aprire una banale maschera con un click.

    Sono potenti, ma soprattutto all'inizio, anche se non complicate, sono la classica visita dal proctologo.

  • Re: Chiamata sub da ribbon

    28/05/2023 - fratac ha scritto:


    Le ribbon sono potenti, ma personalmente le trovo troppo macchinose.

    Praticamente per usarle, oltre a doversi studiare L' XML specifico per loro, bisogna avere un editor esterno per scrivere l' XML, visto che se provi a fare delle modifiche direttamente nel campo della tabella di access, esce fuori un pastrocchio.
    Ad ogni modifica bisogna chiudere e riaprire il database.
    Molte volte anche con questa operazione, il menù personalizzato non parte e bisogna chiudere del tutto access e riaprirlo.

    Condivido … certo, molto dipende dagli scenari e dalle circostanze più o meno particolari. Invece per quanto riguarda le Macro cerco di evitarle e scordarmi che esistono in modo che non sia tentato ad utilizzarle…. le Odio!!!   ;))


    Personalmente uso un multiEditor per agevolare l'Edit di quasi tutti i files senza scaricare applicazioni dedicate. Mi risulta molto pratico e veloce in certe situazioni:


    Esempio banale:


    Dove per esempio con una unica Sub si controllano i vari Buttons della Ribbon :

    ' MY RIBBON USER APPLICATION
    Public Sub MySCtlButtons(ctlRbn As IRibbonControl)
    ' check buttons run
    Select Case ctlRbn.Id
       Case "btnCloseApp"                              ' close application
           DoCmd.Quit
       Case "btnSaveApp"                               ' save all application
           DoCmd.Save
       Case "btnForm1"                                 ' open table form1
           DoCmd.OpenForm "Frm_MyTab1", acNormal
       Case "btnForm2"                                 ' open table form2
           DoCmd.OpenForm "Frm_MyTab2", acNormal
       Case "btnFormPri"                               ' open form main
           DoCmd.OpenForm "Frm_MyMain", acNormal
    End Select
    End Sub

    Insomma, abbastanza semplice e veloce fino a qua….   ;))

    Mentre in altri scenari come da descritti, ovviamente richiedono un esperienza maggiore.


    Invece le Immagine per imageMso una gallery già si può trovare Qui e fa molto comodo:


  • Re: Chiamata sub da ribbon

    Io mi sono creato un modello di lavoro, dove ho già pronta una maschera per la gestione della tabella UsysRibbon, e tutto il materiale che mi occorre per la creazione di un database, come lo stato di avanzamento, gli errori che riscontro, le fonti delle risorse e dalla quale richiamo i due editor XML che uso. Praticamente all'inizio il modello è più grande del database che andrò a creare.
    Notepad ++, ed Xpad 3, con già presenti la maggior parte degli scenari di menù che mi occorrono.

    Nel corso degli anni ho creato molto codice ed ora faccio copia incolla.

    Il problema di questo metodo, come già detto altre volte è che mi ha fatto perdere elasticità nel creare codice partendo da zero.

  • Re: Chiamata sub da ribbon

    28/05/2023 - fratac ha scritto:


    Io mi sono creato un modello di lavoro, dove ho già pronta una maschera per la gestione della tabella UsysRibbon, e tutto il materiale che mi occorre per la creazione di un database, come lo stato di avanzamento, gli errori che riscontro, le fonti delle risorse e dalla quale richiamo i due editor XML che uso. Praticamente all'inizio il modello è più grande del database che andrò a creare.
    Notepad ++, ed Xpad 3, con già presenti la maggior parte degli scenari di menù che mi occorrono.

    Nel corso degli anni ho creato molto codice ed ora faccio copia incolla.

    Il problema di questo metodo, come già detto altre volte è che mi ha fatto perdere elasticità nel creare codice partendo da zero.

    Ottimo Sistema… 

    SI, in effetti il copia incolla limita la ricerca di nuove strategie e conoscenze. Però fa comodo ed è veloce, soprattutto quando determinate cose sono ormai assodate, testate e funzionali allo scopo.

    bene bene bene… 

    Io ho sempre usato il vba ad integrazione delle attività Office per User un pò poco autosufficiente e per esporre le informazioni collegandomi direttamente alle librerie del gestionale principale (unica fonte indiscussa per i databases) … insomma, soprattutto come FrontEnd senza intaccare le basi dati. 

    Poi si , più o meno piccole applicazioni di utility, ma niente da stravolgere l'architettura del gestionale di riferimento. 

    Adesso solo per diletto… ho appeso al chiodo tutto… ma mi diverto, avendo molto più tempo adesso, ad approfondire argomenti con approcci possibilmente più consoni. 

  • Re: Chiamata sub da ribbon

    28/05/2023 - By65Franco ha scritto:


    Adesso solo per diletto… ho appeso al chiodo tutto… ma mi diverto, avendo molto più tempo adesso, ad approfondire argomenti con approcci possibilmente più consoni. 

    io invece non mi sono mai buttato sullo sviluppo professionale. 35 anni fa, per un breve periodo avevo accarezzato l'idea, ma poi non sopportavo l'interazione con i clienti e le loro richieste assurde, non inerenti alla funzionalità dei programmi che volevano e che per i mezzi dell'epoca portavano via moltissimo tempo, rispetto allo sviluppo principale e che poi si lamentavano perchè i costi lievitavano. E quindi abbandonai l'idea.
    Quindi sono uno scarso sviluppatore della domenica, che ogni tanto riapre solo  access.

  • Re: Chiamata sub da ribbon

    28/05/2023 - fratac ha scritto:


    28/05/2023 - By65Franco ha scritto:


    Adesso solo per diletto… ho appeso al chiodo tutto… ma mi diverto, avendo molto più tempo adesso, ad approfondire argomenti con approcci possibilmente più consoni. 

    io invece non mi sono mai buttato sullo sviluppo professionale. 35 anni fa, per un breve periodo avevo accarezzato l'idea, ma poi non sopportavo l'interazione con i clienti e le loro richieste assurde, non inerenti alla funzionalità dei programmi che volevano e che per i mezzi dell'epoca portavano via moltissimo tempo, rispetto allo sviluppo principale e che poi si lamentavano perchè i costi lievitavano. E quindi abbandonai l'idea.
    Quindi sono uno scarso sviluppatore della domenica, che ogni tanto riapre solo  access.

    Ottimo,

    dai, allora buon divertimento e buon “Lavoro”…. vi seguo sempre con molto interesse approfondendo via via le varie discussioni soprattutto per quei temi per i quali raramente mi sono cimentato nel passato, etc… etc… etc… almeno finchè reggono le Sinapsi ;)))) 

    Ciaoooo 

Devi accedere o registrarti per scrivere nel forum
12 risposte