Uscita da un controllo di una maschera

di il
7 risposte

Uscita da un controllo di una maschera

Buongiorno,
ho una maschera in cui inserisco le ore di assenza dei dipendenti; ho 7 campi posti come descritto nella sequenza di tabulazione: IP_Persona, Data, Ore_Ferie, Ore_Malattia, Ore_Infortunio, Ore_AVIS ed un campo Note (i nomi dei campi sono stati semplificati...). Attualmente quando inserisco le ore da tastiera mi muovo con il tasto TAB scorrendo i singoli campi uno ad uno compilando quelli necessari. Per accelerare l'inserimento ed evitare errori, siccome se uno e' assente solo uno dei 4 campi "Ore_Ferie" "Ore_Malattia" "Ore_Infortunio" "Ore_AVIS" deve essere compilato, ho inserito il seguente codice sull'evento uscita da ogni campo "ore...":
Private Sub frmOFNUMtabFMav_Exit(Cancel As Integer)
On Error GoTo Err_frmOFNUMtabFMav_Exit
    
    If Not IsNull(Me.frmOFNUMtabFMav) Then
        frmOFMEMOtabFMno.SetFocus
    End If

Exit_frmOFNUMtabFMav_Exit:
Exit Sub
    
Err_frmOFNUMtabFMav_Exit:
    MsgBox Err.Description
    Resume Exit_frmOFNUMtabFMav_Exit

End Sub
In questo modo se, uscendo dal campo il valore non e' nullo, il focus si sposta sul campo Note senza dover scorrere con il TAB gli eventuali altri campi posti in sequenza.
Quello che ora vorrei modificare e' il caso di uscita dal campo con i tasti Shift+TAB, perche' a volte devo muovermi indietro per eventualmente cambiare la data o l'ID_Persona.
Qui mi sono incartato perche' se inserisco una routine sull'evento keydown verificando la condizione se e' stato premuto Shift+TAB, poi sull'evento Exit non funziona la routine sopra. Mi chiedevo se sull'evento Exit si puo' verificare quali tasti sono premuti.
Grazie in anticipo

7 Risposte

  • Re: Uscita da un controllo di una maschera

    Mostra il codice su KeyDown.
  • Re: Uscita da un controllo di una maschera

    L'evento descritto sotto e' sul campo Ore_ferie ed il campo precedente in ordine di tabulazione e' il campo Data (sempre utilizzando nomi semplificati). Io avevo pensato a qualcosa del genere:
    
    Private Sub frmOFNUMtabFMfe_KeyDown(KeyCode As Integer, Shift As Integer)
        
        If KeyCode = vbKeyTab And Shift = vbKeyShift Then
            frmOFDATAtabFMda.SetFocus
        End If
        
    End Sub
    
    Pero' ovviamente dopo questo evento si genera l'evento Exit che mi sposta il focus sul campo Note se il valore del campo non e' nullo ...
  • Re: Uscita da un controllo di una maschera

    L'alternativa drastica a cui stavo pensando era di inserire nella maschera un gruppo di opzioni a scelta univoca indicizzando le causali di assenza e lasciare un unico campo di inserimento delle ore, togliendomi dagli impicci. Ma dovrei poi mettere mano alla tabella dei dati modificando tutti i record presenti ed al report di stampa mensile, volevo vedere se potevo evitarlo.
    Probabilmente questa era la soluzione iniziale da seguire...
  • Re: Uscita da un controllo di una maschera

    Ciao.
    Se fossi in te modificherei proprio la struttura del database.
    Per due motivi, primo perché avresti qualcosa di pulito e snello a livello di struttura che ti permetterebbe anche query molto agevoli.
    Secondo perché stai creando una serie di accrocchi, che ti costringeranno a mettere variabili di controllo, scrivere codice ricorsivo etc etc.
    E da quello che ho capito hai anche dei campi null in ogni record. E ai database non piacciono i null, soprattutto ad access, e potresti avere qualche problema con le query con i join.
    E le cose contorte non vanno mai bene.
    Anche perché se in futuro dovessi aggiungere una causale, dovresti modificare ugualmente il database.
    Metti che qualcuno ti vada in maternità o paternità....
    Però ho il sospetto che hai una tabella unica e non una tabella anagrafica, collegata con un altra tabella dove salvi le ore.
    Se cosi fosse devi creare una anagrafica ed una tabella per le ore.
    Inoltre, nella tabella delle ore, non devi mettere delle opzioni, tipo radio button o check button. Ma una semplicissima combobox, dove selezioni la causale. In questo modo avresti la possibilità di aggiungere millemila causali, senza sventrare le tabelle.
    Lo so. Il solo pensiero di rifare tutto fa sudare freddo, ma alla fine faresti prima che cercare di scrivere decine di righe di codice, per poi ottenere qualcosa pieno di bug.
    E poi avresti una form con solo due campi.
    Semplice e pulita.
  • Re: Uscita da un controllo di una maschera

    Mi sa che hai ragione fratac, in effetti non piace neanche a me la struttura attuale. Ma siccome ho in programma di riprogettarlo un po' tutto perche' ci sono altre parti del DB che non sono normalizzate, volevo vedere se c'era per il momento una soluzione non troppo "accrocchiata" per uscirne senza modificare, per il momento, tabella, maschera e report.
    PS Ho tabella con anagrafica dipendenti e tabella separata per le ore di assenza, in cui in effetti ho campi con valori nulli...
  • Re: Uscita da un controllo di una maschera

    Ci stavo pensando.
    Non ti conviene impazzirti con la gestione del tab.
    Secondo me potresti creare delle scorciatoie da tastiera, con la combinazione shift+iniziale del campo.
    Con il vb6 mi sembra che era nativo.
    Forse anche con il vba.
    Magari gestito con l evento timer della form.
    Sono secoli che non uso le scorciatoie quindi non ricordo come fare.
    Sarebbe anche più agevole da suboto.
    Apri la form, inserisci il dipendente, scorciatoia e via.
  • Re: Uscita da un controllo di una maschera

    Dopo mezza giornata di lavoro ho seguito la "strada maestra" suggerita da fratac, ho ricostruito la tabella nuova con i soli campi ID_Persona, Data, ID_Causale_Assenza, Ore_Assenza e ho importato i dati dalla vecchia tabella formattandoli in modo adeguato. Ho creato una nuova tabella con le causali di assenza che mi hanno permesso di poter aggiungere ulteriori voci come la CIG, Congedo parentale, Legge 104, ecc. Ho creato poi nuova maschera e nuovo report.
    Problema eliminato all'origine. Grazie a tutti
Devi accedere o registrarti per scrivere nel forum
7 risposte