Newsgroup: it.comp.appl.access
Titolo: disabilitare controlli in base a data

Salve.
Ho una maschera con 31 controlli (da cmbIdPresenzaTipo1 a cmbIdPresenzaTipo31) per inserire la presenza giornaliera del mese. 
Accanto ad ognuno ho un controllo con la relativa data (txtDataPresenzaX).
In altre due caselle di controllo, al caricamento della form, importo la data di ingresso e di eventuale dimissione del soggetto.
L'obiettivo è disabilitare i controlli che hanno la data inferiore alla data di ingresso e superiore alla data di dimissione.
Come posso scrivere un codice più sintetico rispetto a 
If me.txtDataPresenza1 < me.txtDataIngresso then
me.cmbIdPresenzaTipo1.enabled = False
elseif  me.txtDataPresenza2 < me.txtDataIngresso then
me.cmbIdPresenzaTipo2.enabled = False
eccc....
e così anche per la situtazione inversa?
Grazie.
 
Giuseppe

Fai un ciclo sui 31 controlli...?
 
Una cosa simile...
 
DIM ctl AS Access.Control
FOR I=1 TO 31
   set ctl=ME.CONTROLS("Nomecobtrollo" & I)
   ctl.ebabled=ctl>=Me!Dataingresso
NEXT
 
 
@Alex


Ciao Alex grazie della risposta.
Mi dice errore di compilazione , variabile non definita e mi evidenzia la I.
Ho messo Dim I as Integer
e vado con il debug al rigo successivo
Siccome i controlli da disabilitare sono cmbIdPresenzaTipoX, ho creato la variabile ctl2 e modificato il codice come di seguito (i controlli sono tutti di default impostati su abilitati)
 
Dim ctl As Access.Control
Dim ctl2 As Access.Control
Dim i As Integer
    For i = 1 To 31
       Set ctl = Me.Controls("txtdatapresenza" & i)
       Set ctl2 = Me.Controls("cmbIdPresenzaTipo" & i)
       If ctl < Me.txtDataIngresso Then
            ctl2.Enabled = False
        End If
    Next
 
Mentre per la tua variabile (ctl) il valore ad ogni ciclo si aggiorna, su quella che ho creato io il valore è sempre nullo e non disabilita niente.
Cosa c'è di sbagliato?


In aggiunta all'errore sulla variabile ctl2, si aggiunge questo:
Disabilita tutto o non disabilita niente, perchè 
If ctl < Me.txtDataIngresso
non dà l'esito sperato
(ho cambiato me!DataIngresso con me.txtDataIngresso perchè il controllo non è associato).


Il giorno sabato 18 aprile 2020 16:07:39 UTC+2, Giuseppe ha scritto:

Ovviamente ti avevo fatto un ESEMPIO che avresti dovuto adeguare...
 
Preferivo usare i Controlli dichiarati ma non è indispensabile, quindi semplificandolo ulteriormente, magari lo comprendi meglio:
Dim i As Integer
For i = 1 To 31
   Me.Controls("cmbIdPresenzaTipo" & i).Enablrd=Me.Controls("txtdatapresenza" & i)>me.txtDataIngresso
Next
 
@Alex


Grazie tante Alex.
Era corretto come avevo fatto solo bisognava sostituire
ctl < Me.txtDataIngresso
con 
ctl < CDate(Me.txtDataIngresso)
Saluti.


L'uso del cDate(...) lo hai messo a caso o proprio serve...?
;-)
 
Non serve, altrimenti sarebbe sintomo di qualche cosa di strano... o servirebbe anche lato SX della condizione... non credi...?
 
@Alex


Alex la data della casella di testo txtDataIngresso viene popolata su caricamento della form da una colonna di una combo di altra form.
Evidentemente viene riportata come stringa e non come data e con l'utilizzo di cDATE(....) ho risolto.
Grazie della precisazione, farò ulteriori prove.
Giuseppe