Newsgroup: it.comp.appl.access
Titolo: Richiamare funzione in evento maschera

Ciao a tutti,
domanda banale probabilmente,ma ho bisogno comunque di voi!
Ho un codice che dovrei ripetere più volte in una Select Case e stavo
pensando di creare una funzione pubblica in un modulo.
Non riesco però a richiamarla correttamente nel codice sull'evento
della maschera.
Questo è il codice del modulo:
Public Function block()
If Me.anno < Year(Date) Then
 Me.campo1.Enabled = False
 Me.campo2.Enabled = False
 Me.campo3.Enabled = False
......
......
end function
all'interno del codice nell'evento di una form,provo a richiamarla
facendo:
call block()
ma mi dà errore.
Sapreste dirmi dove è l'errore (o gli errori) per favore?
Grazie mille per l'aiuto,come sempre!

 ha scritto nel messaggio 
news:1185873627.6...@22g2000hsm.googlegroups.com...

Public Function block()



[risposta]
Se non deve restituirti nulla puoi utilizzare una subroutine:
Public Sub block()
If Me.anno < Year(Date) Then
 Me.campo1.Enabled = False
 Me.campo2.Enabled = False
 Me.campo3.Enabled = False
......
......
end Sub
Poi i riferimenti "Me", in un modulo esterno alla form, non puoi 
utilizzarli.
Devi passare come paramentro il nome della form e i controlli...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggionews:1185873627.6...@22g2000hsm.googlegroups.com...

Grazie come al solito,ho notato infatti nel frattempo che non mi fa
utilizzare il riferimento "Me".
Puoi farmi un esempio per favore di come devo passare come parametro
il nome della form e i controlli,quindi come modificarla?
Grazie ancora come sempre

 ha scritto nel messaggio 
news:1185878592.6...@k79g2000hse.googlegroups.com...
Grazie come al solito,ho notato infatti nel frattempo che non mi fa
utilizzare il riferimento "Me".
Puoi farmi un esempio per favore di come devo passare come parametro
il nome della form e i controlli,quindi come modificarla?
Grazie ancora come sempre
[risposta]
Prima di farti l'esempio vorrei tornare sul perché vuoi fare questa routine.
Se è per cambiare lo stato di uno o più controlli sulla maschera in base ad 
un valore:
If Me.anno < Year(Date) Then
...
io utilizzerei l'evento "su corrente" della form:
 Me.campo1.Enabled = not (Me.anno < Year(Date))
 Me.campo2.Enabled = not (Me.anno < Year(Date))
 Me.campo3.Enabled = not (Me.anno < Year(Date))
...
senza nessuna function o sub in più.
Poi se vuoi crearti sub/function e passargli dei parametri, nell'help in 
linea (del VBA) cerchi: Chiamata di routine Sub e Function
troverai degli esempi; la fantasia (o l'NG) farà il resto...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggionews:1185878592.6...@k79g2000hse.googlegroups.com...

ci provo, più o meno cosi ...  :
public function tuafunzione(nome_form as string)
forms(nome_form).campo1.Enabled = not (Me.anno < Year(Date))
quando chiami la funzione devi aggiungere il nome della form come
variabile stringa
call tuafunzionde("nome_form")

 Sergio MAZZA
Spiego meglio qual'è la mia necessità in modo da poter essere più
chiaro!
Sto implementando un sistema di accesso utente,ho preso spunto da un
db sul sito comune sezione general 6.72 e lo sto personalizzando in
base alle mie esigenze.Fin qui tutto ok.
Sintetizzando,utilizzo una variabile public (var_tipo) in un modulo
esterno per memorizzare un dato che mi servirà per assegnare il tipo
di accesso, in alcune maschere, all'utente correttamente loggato
(lettura,scrittura,ecc.)
Sull'evento apertura di una maschera ad esempio ho inserito questo
codice:
Private Sub Form_Open(Cancel As Integer)
If var_tipo <> 0 Then
Select Case var_tipo
Case 1
    Me.AllowAdditions = True
    Me.AllowDeletions = True
    Me.AllowEdits = True
    Me.AllowFilters = True
Case 2
  Me.AllowAdditions = False
    Me.AllowDeletions = False
    Me.AllowEdits = False
    Me.AllowFilters = False
    call block    'qui provo a richiamare la sub per  bloccare anche i
campi calcolati presenti nella maschera
Case 4
    Me.AllowAdditions = False
    Me.AllowDeletions = False
    Me.AllowEdits = False
    Me.AllowFilters = True
   call block   ''qui provo a richiamare di nuovo la sub per bloccare
anche i campi calcolati presenti nella maschera
     'ecc. ecc.
End Select
Else
MsgBox ("Errore")
End If
end sub
Questo è un po il sistema!
Dato che avrò diverse opzioni nella "case" ho intenzione di prepararmi
delle sub da richiamare all'occorrenza.
Ma nel modo in cui faccio mi escono appunto quegli errori,e mi sareste
veramente di grande aiuto se riusciste ad aiutarmi a risolvere la
questione.
Ti/Vi ringrazio fin d'ora

 ha scritto nel messaggio 
news:1185888724.6...@k79g2000hse.googlegroups.com...
ci provo, più o meno cosi ...  :
public function tuafunzione(nome_form as string)
forms(nome_form).campo1.Enabled = not (Me.anno < Year(Date))
[risposta]
Forse è meglio con:
forms(nome_form).campo1.Enabled = not (forms(nome_form).anno < Year(Date))
quando chiami la funzione devi aggiungere il nome della form come
variabile stringa
call tuafunzionde("nome_form")
[risposta]
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
era un rimasuglio ... e tu l'hai beccato ...
mio mentore!

 ha scritto nel messaggio 
news:1185888992....@b79g2000hse.googlegroups.com...
Spiego meglio qual'č la mia necessitŕ in modo da poter essere piů
chiaro!
Sto implementando un sistema di accesso utente,ho preso spunto da un
db sul sito comune sezione general 6.72 e lo sto personalizzando in
base alle mie esigenze.Fin qui tutto ok.
Sintetizzando,utilizzo una variabile public (var_tipo) in un modulo
esterno per memorizzare un dato che mi servirŕ per assegnare il tipo








     'ecc. ecc.

Questo č un po il sistema!
Dato che avrň diverse opzioni nella "case" ho intenzione di prepararmi
delle sub da richiamare all'occorrenza.
Ma nel modo in cui faccio mi escono appunto quegli errori,e mi sareste
veramente di grande aiuto se riusciste ad aiutarmi a risolvere la
questione.
Ti/Vi ringrazio fin d'ora
[risposta]
Il problema č che se vuoi generalizzare la chiamata alla sub che blocca i 
controlli, devi (secondo me) cambiare approccio.
Ossia; non indicare quali controlli devono essere bloccati, passando il nome 
o riferimento alla sub (potrebbero essere molti e con nomi complicati), ma 
utilizzando la proprietŕ "Tag" di ogni controllo che vuoi bloccare 
inserendoci un testo qualsiasi es. "daBloccare".
Quindi con una routine del genere:
sub block(nomeForm as string, nomeTag as string, flag as boolean)
dim oCtrl as Control
for each oCtrl in forms(nomeForm).Controls
    if oCtrl.tag = nomeTag then
        oCtrl.enabled = flag
    end if
next
end sub
Che richiamerai cosě:
block "daBloccare", true
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Ho fatto esattamente come mi hai detto(inserito nel tag dei controlli
la stringa "daBloccare",creato il modulo con la funzione) ma mi dà
errore quando provo a richiamare la funzione in quel modo.
Mi evidenzia la parola "block" e mi dice : "Errore di
compilazione:Argomento non facoltativo"

 ha scritto nel messaggio 
news:1185897935.5...@19g2000hsx.googlegroups.com...
Ho fatto esattamente come mi hai detto(inserito nel tag dei controlli
la stringa "daBloccare",creato il modulo con la funzione) ma mi dà
errore quando provo a richiamare la funzione in quel modo.
Mi evidenzia la parola "block" e mi dice : "Errore di
compilazione:Argomento non facoltativo"
[risposta]
Ho fatto un ciroteo-errore; manca il passaggio del nome della form:
block 
me.name
, "daBloccare", true
Ciao.
-- 
Sergio MAZZA