Discussione:
Richiamare funzione in evento maschera
(troppo vecchio per rispondere)
bizio
2007-07-31 09:20:27 UTC
Permalink
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!
Sergio MAZZA
2007-07-31 10:28:31 UTC
Permalink
"bizio" <***@libero.it> ha scritto nel messaggio news:***@22g2000hsm.googlegroups.com...
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!


[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
bizio
2007-07-31 10:43:12 UTC
Permalink
Post by bizio
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.
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
call block()
ma mi dà errore.
Sapreste dirmi dove è l'errore (o gli errori) per favore?
Grazie mille per l'aiuto,come sempre!
[risposta]
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
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
Sergio MAZZA
2007-07-31 11:58:00 UTC
Permalink
"bizio" <***@libero.it> ha scritto nel messaggio news:***@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
ciroteo
2007-07-31 13:32:04 UTC
Permalink
Post by bizio
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
If Me.anno < Year(Date) Then
...
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
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
2007-07-31 13:36:43 UTC
Permalink
"ciroteo" <***@gmail.com> ha scritto nel messaggio news:***@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
ciroteo
2007-07-31 13:57:05 UTC
Permalink
Post by ciroteo
public function tuafunzione(nome_form as string)
forms(nome_form).campo1.Enabled = not (Me.anno < Year(Date))
[risposta]
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
era un rimasuglio ... e tu l'hai beccato ...
mio mentore!
bizio
2007-07-31 13:36:32 UTC
Permalink
Post by Sergio MAZZA
[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
If Me.anno < Year(Date) Then
...
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
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
Sergio MAZZA
2007-07-31 14:22:50 UTC
Permalink
"bizio" <***@libero.it> ha scritto nel messaggio news:***@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
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

[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
bizio
2007-07-31 16:05:35 UTC
Permalink
Post by Sergio MAZZA
[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".
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
block "daBloccare", true
Ciao.
--
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"
Sergio MAZZA
2007-07-31 16:19:27 UTC
Permalink
"bizio" <***@libero.it> ha scritto nel messaggio news:***@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
Loading...