ACCESS 2007 Collegare una funzione VBA a una proprietà evento

di il
18 risposte

ACCESS 2007 Collegare una funzione VBA a una proprietà evento

Sul sito seguentehttps://support.microsoft.com/it-it/office/introduzione-alla-programmazione-in-access-92eb616b-3204-4121-9277-70649e33be4f#bmconvertmacrostovba
sotto Collegare una funzione VBA a una proprietà evento ci sono descritti 2 metodi.

La prima copiare il codice VBA in un modulo di classe) funziona, ma la seconda (creare una chiamata speciale dalla proprietà evento al modulo standard...) che è descritto in seguito, non funziona.

Ho fatto tutti i passi, ma eseguendo il controllo (myButton) con l'evento del doppia click mi esce il seguente messaggio d'errore:
"Impossibile trovare il nome di funzione immesso nel espressione..."

Q.u. mi potrebbe aiutare? Cosa ho dimenticato?

Grazie

18 Risposte

  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    Pogo63 ha scritto:


    Sul sito seguentehttps://support.microsoft.com/it-it/office/introduzione-alla-programmazione-in-access-92eb616b-3204-4121-9277-70649e33be4f#bmconvertmacrostovba
    sotto Collegare una funzione VBA a una proprietà evento ci sono descritti 2 metodi.

    La prima copiare il codice VBA in un modulo di classe) funziona,
    Per modulo di classe, si intende quello di Maschera perchè accedere ad una classe in questo modo è più complesso, attivato dall'impostazione [Routine Evento]... intendi questo vero...?
    Distingui correttamente i moduli di codice nel progetto..?
    1) Moduli Standard
    2) Moduli di Classe
    3) Moduli di Classe Delle Form

    Il 2° ha una gestione ben più complessa che richiede l'istanza, cosa che il 3° gestisce automaticamente all'apertura della Form.

    Pogo63 ha scritto:


    ma la seconda (creare una chiamata speciale dalla proprietà evento al modulo standard...) che è descritto in seguito, non funziona.
    Crei in sempre nel Modulo di Classe della Form, una Funzione, oppure se generica che può asservire a più Form dichiarata Public in un modulo Standard e la richiami nell'evento inserendo:
    =NomeFunzione().

    Es:
    
    Public Function EseguiCodice(Param as Integer)
          MsgBox "Parametro=" & Param
    End Function
    Poi nella proprietà Evento scrivi
    
    =EseguiCodice("Eccolo")
    E funziona.

    Pogo63 ha scritto:


    Ho fatto tutti i passi, ma eseguendo il controllo (myButton) con l'evento del doppia click mi esce il seguente messaggio d'errore:
    "Impossibile trovare il nome di funzione immesso nel espressione..."

    Q.u. mi potrebbe aiutare? Cosa ho dimenticato?

    Grazie
    Dovresti avere tutto.
  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    Pogo63 ha scritto:


    Cosa ho dimenticato?
    Suggerimento generale: leggi sempre la versione in inglese, più di una volta la traduzione in italiano lascia perplessi.
    Guarda... sfido chiunque alle prime armi a far funzionare quello che c'è scritto in quella pagina.
    Per prima cosa si parla di Macro convertite in VBA, e vabbè, lasciamo stare che m'hanno costretto a scrivere quella parola che finisce per "cro" ed inizia per "ma".
    Possiamo iniziare da
    Unlike a class module, a standard module is not part of a form or report.
    Nemmeno un modulo di classe fa parte di una maschera o di un report. Eventualmente si parla di oggetti di classe (così li indentifica VBE), cioè i moduli che contengono il codice scritto in maschere e report, che non sono moduli standard e non sono moduli di classe in senso "proprio".
    Ecco che questa mancata distinzione si protrae in
    You will most likely want to associate the function with an event property on a form, report, or control so that the code runs exactly when and where you want. To do this, either you can copy the VBA code into a class module and then associate it with an event property
    Secondo me se si segue alla lettera quello che c'è scritto, cioè si scrive in un modulo di classe, non compila nemmeno.
    e mi fermo qui perché c'ha già pensato @Alex
  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    Philcattivocarattere ha scritto:


    ...
    Unlike a class module, a standard module is not part of a form or report.
    Nemmeno un modulo di classe fa parte di una maschera o di un report. Eventualmente si parla di oggetti di classe (così li indentifica VBE), cioè i moduli che contengono il codice scritto in maschere e report, che non sono moduli standard e non sono moduli di classe in senso "proprio".
    Io la tradurrei così, perchè rende meglio l'idea tecnica:
    A differenza di un modulo di classe, un modulo standard non fa parte di una maschera o di un report. 
    Cosa che da un senso al fatto che, in una Form il Modulo è di classe,lo dicono le sue caratteristiche proprie di una Classe ed è riconosciuto da VBE come Classe, la differenza è solo che è legata ad un'oggetto Grafico Form/Report, gli OCX funzionano allo stesso modo.

    In Vb6 addirittura, cosa che il VBA non consente, potevi istanziare da codice anche un oggetto Activex senza aprirlo... con Access invece lo devi aprire, poi lo puoi istanziare anche N volte, in quel caso quando Generi MULTISTANZA della Classe Form_Nome istanzi anche l'oggetto Grafico ed apri 1÷n Form... e si vedono tutte se le rendi Visibili.

    Un'oggetto appartenente alla Form/Report, come una TextBox o altro, può accedere ad un Metodo di Istanza di Classe Form semplicemente invocandolo, quindi nella Form una Function è richiamabile direttamente in quanto visibile dall'oggetto appartenente alla classe Form/Report stessa a cui anche lui appartiene.

    Contrariamente, un Modulo Standard è ESTERNO alla Form/report, quindi non visibile nei suoi Metodi, se non resi Public.
    in quanto Oggetto ESTERNO alla Form/Report, che invece sono proprio Moduli di Classe ma Privati di Form/report, ovvero non istanziabili sincolarmente senza l'istanza dell'oggetto Padre.
  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    @Alex ha scritto:


    Io la tradurrei così, perchè rende meglio l'idea tecnica:
    A differenza di un modulo di classe, un modulo standard non fa parte di una maschera o di un report. 
    Che è quello che c'è scritto su quella pagina. Io ero andato direttamente alla versione inglese. Lungi da me voler spiegare il funzionamento dei vari moduli con Access, intendevo solo evidenziare quanto fosse poco precisa quella pagina, a mio avviso (che è la versione edulcorata di "se volete imparare come si fa non leggete lì").
    In quell'articolo si parla di modulo di classe senza precisare se è quello collegato all'oggetto (report o maschera) o se un modulo di classe puro. Se uno va a scrivere una funzione in un modulo di classe (puro) può richiamarla in un evento di una maschera/report? Non credo, non è quello l'uso del modulo di classe.
  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    Philcattivocarattere ha scritto:


    ...
    In quell'articolo si parla di modulo di classe senza precisare se è quello collegato all'oggetto (report o maschera) o se un modulo di classe puro. Se uno va a scrivere una funzione in un modulo di classe (puro) può richiamarla in un evento di una maschera/report? Non credo, non è quello l'uso del modulo di classe.
    Non direttamente per il semplice fatto che da Editor Oggetti non si riesce a chiamare una istanza di Classe, anche se si vedono i Metodi/Eventi/Proprietà dichiarati Public, ma non sono referenziabili in quanto dipendenti dall'istanza e non dall'oggetto...
  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    Grazie per le vostre risposte veloci e precisi.

    Ho reso pubblico la funzione nel modulo, ma da lo stesso errore. Inoltre mi ricordo di aver letto che le funzioni e subroutine sono per default 'Public'.
    Sono un principiante del Access e programmare col VBA ho iniziato q.c. gg. fa. Stò faccendo i primi tentativi.
    La DB è condiviso in 3 parti:
    1. Tabella1, 3 Maschere e 1 Report.
    2. Tabella2, e una maschera.
    3. Oggetti non correlati: 3 Macros e 2 Moduli dove 1 modulo è 1 Macro convertita e il secondo è lo stesso con 1 riga aggiunta:
    "
    Public Function MyOpenForm()
    On Error GoTo OpenForm_Err

    DoCmd.OpenForm "LogisticaProduzione_Tab", acNormal, "", "", , acNormal
    DoCmd.Beep 'questo è la riga aggiunta'


    OpenForm_Exit:
    Exit Function

    OpenForm_Err:
    MsgBox Error$
    Resume OpenForm_Exit

    End Function
    "
    Questa Function volevo che viene eseguita quando faccio un doppio click sul bottone cmdMyButton che fa parte della Maschera1 della Tabella1. E ho scritto nelle proprietà del evento doppio click: =MyOpenForm()

    E' giusto così, o manca qualcosa?

    Grazie
  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    Pogo63 ha scritto:


    Grazie per le vostre risposte veloci e precisi.

    Ho reso pubblico la funzione nel modulo, ma da lo stesso errore. Inoltre mi ricordo di aver letto che le funzioni e subroutine sono per default 'Public'.
    Se non si specifica sono Public, tuttavia usiamo sempre la dichiarazione ESPLICITA è questione di chiarezza.

    Pogo63 ha scritto:


    Sono un principiante del Access e programmare col VBA ho iniziato q.c. gg. fa. Stò faccendo i primi tentativi.
    La DB è condiviso in 3 parti:
    1. Tabella1, 3 Maschere e 1 Report.
    2. Tabella2, e una maschera.
    3. Oggetti non correlati: 3 Macros e 2 Moduli dove 1 modulo è 1 Macro convertita e il secondo è lo stesso con 1 riga aggiunta:
    
    Public Function MyOpenForm()
    On Error GoTo OpenForm_Err
    
        DoCmd.OpenForm "LogisticaProduzione_Tab", acNormal, "", "", , acNormal
        DoCmd.Beep    'questo è la riga aggiunta'
    
    
    OpenForm_Exit:
        Exit Function
    
    OpenForm_Err:
        MsgBox Error$
        Resume OpenForm_Exit
    
    End Function
    Il codice si inserisce usando i TAG appositi per il codice, come ho modificato sopra...!

    Pogo63 ha scritto:


    Questa Function volevo che viene eseguita quando faccio un doppio click sul bottone cmdMyButton che fa parte della Maschera1 della Tabella1. E ho scritto nelle proprietà del evento doppio click: =MyOpenForm()
    Non ti pare suoni malissimo quanto scrivi...?

    Pogo63 ha scritto:


    E' giusto così, o manca qualcosa?
    Grazie
    E' corretto e deve funzionare... non vorrei tu avessi NOMI DOPPI o chiamato il Modulo come La Function.
  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    Grazie per la risposta.

    Si ho chiamato il Modulo come la Function. Adesso rinomino tutto e faccio un' altra prova.
  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    Ok. Era questa il problema. Adesso funziona. Grazie @Alex e Philcattivocarattere.
  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    Buon giorno a tutti,

    purtroppo il problema è riapparso.

    https://drive.google.com/file/d/1uN3bQjrqODpBdht0bQa_E7bNpcTcCeJ9/view?usp=sharing

    Al contrario di prima, nessun modulo viene collegato.

    Non so più cosa fare.

    Qualche idea?

    Grazie in anticipo.
  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    Elementi INSUFFICIENTI per capire.
  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    Perchè? Cosa Manca?
  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    Siccome i fantasmi non esistono, ipotizzo che ti possa sfuggire qualche cosa di Banale a cui non pensi o che non vedi, è evidente che da quanto ci riporti apparentemente non ci sia una causa concreta diagnosticabile.
    Quindi l'unica risposta che possiamo darti è che non abbiamo elementi.

    Se vuoi allegare il tuo lavoro dopo averlo smagrito al minimo e tolto dati sensibili, ed accertato che anche in questa veste ridotta il problema persiste... qualcuno può aprirlo e provare a vedere se esiste qualche evidenza.
  • Re: ACCESS 2007 Collegare una funzione VBA a una proprietà evento

    Ok, l'ho messo sul mio google drive

    https://drive.google.com/file/d/1dHPsdmSb5l7jnEUKVhP4khsg2T23xXjc/view?usp=sharing

    Aprire la maschera cliccando su 'divisa' si vede il bottone chiamato 'costanti'.

    Cliccando succede l'errore.

    L'evento 'Su Click' chiama la funzione 'ShowConst' nel modulo Constant_Demo.

    Nel editor Constant_Demo funziona.
Devi accedere o registrarti per scrivere nel forum
18 risposte