Valore di un controllo esterno alla maschera

di il
7 risposte

Valore di un controllo esterno alla maschera

Buonasera, scusate la domanda, sono nuovo e non mi reputo un conoscitore di Access ma ho bisogno di una mano per cercare di risolvere un problema.

Ho 2 maschere (A e B), nella maschera A sono presenti 20 oggetti di tipo SI/NO nominati Ctl1....Ctl20 che mi servono per far colorare di verde o rosso i rispettivi 20 rettangoli anche loro nominati Rett1....Rett20.
Cliccando uno di questi 20 rettangoli (es. Rett15) mi apre la maschera B con 2 caselle di testo una (varConteggio) contenente un numero generato da una sottomaschera e la seconda (varControllo) con il numero corrispondente al rettangolo cliccato (15).
Ora vorrei, alla chiusura di questa maschera B poter assegnare SI al controllo corrispondente (Ctl15) della maschera A se Me.varConteggio è maggiore di 0.

La sintassi su evento chiusura della maschera B è:

Private Sub Form_Close()

If Me.varConteggio > 0 Then
Forms[MascheraA].[Ctl...] = -1
Else
Forms[MascheraA].[Ctl...]= 0
End If

DoCmd.Close acForm, "MascheraA"
DoCmd.OpenForm "MascheraA"

End Sub

al campo .[Ctl...] dove ho messo i ... se inserisco un numero da 1 a 20, funziona regolarmente, il dilemma ora è come posso farlo variare in base al rettangolo premuto?

Ho provato pure la seguente sintassi:

"Forms![MascheraA].[" & Me.varControllo & "]" = -1

ma nulla da fare.
Grazie infinite.

7 Risposte

  • Re: Valore di un controllo esterno alla maschera

    Prima di tutto dovremmo capire come apri la Maschera2... se POPUP si gestisce in modo diverso.
    Personalmente quando i controlli hanno indice Numerico metto un UNDERSCORE... perchè aiuta a fare lo strip...!
    Esempio:
    Ret1
    Ret15
    Come fai a determinare l'indice del Premuto...? Io userei i Numeri del Nome ma avendo + di 9 Controlli non sai qual'è...
    Quindi hai 3 Soluzioni:
    1) Ret01 Ret02...Ret15 in questo modo sai che l'indice sono sempre 2 Caratteri e con Right(Screen.ActiveControl.Name) Ottieni l'indice.
    2) Mettere un UnderScore... Ret_1 Ret_15, in questo modo usi il Char=Underscore per strippare l'indice
    3) Usare la proprietà TAG...

    Io OPTEREI per la 1°.
    Detto questo se da Maschera1 premi Ret[n] ti basterà passare alla Funzione OpenForm, nel Parametro ARGS il numero del Rettangolo premuto...
    docmd.OpenForm "Maschera2",,,,,,Right(Screen.ActiveControl,2)
    A questo punto nella Maschera2, su Evento LOAD leggi la proprietà OpenArgs e trovi il valore del controllo passato.
    
    Dim vVal    As String
    Private Sub Form_Load()
       vVal=Me.OpenArgs
    End Sub
    Quindi su Evento UNLOAD e non close... meglio
    Forms!MascheraA.Controls("Ret" & vVal).Value=True
    Questo metodo lo puoi usare anche se la Maschera2 è Popup.
  • Re: Valore di un controllo esterno alla maschera

    Sarebbe utile capire capire come gestisci l'apertura delle due maschere.


    MODIFICA:


    @Alex è arrivato prima di me
  • Re: Valore di un controllo esterno alla maschera

    Perdonami, cerco di essere il più dettagliato possibile.
    L'apertura delle maschere è POPUP, la maschera A deriva da una tabella contenente i 20 campi SI/NO e mi serve per avere il risultato memorizzato, la maschera B non è collegata ad alcuna tabella contiene 2 sottomaschere di cui 1 fornisce un risultato numerico in base ai record presenti questo risultato viene inserito automaticamente in una casella di testo (varConteggio).
    Sempre nella maschera B ho creato una casella di testo il cui valore è il nome del controllo in questione presente della maschera A ovvero nella casella (varControllo) mi esce scritto Ctl15 (se ho premuto il rettangolo 15) ovviamente posso anche far uscire Forms![MascheraA].[Ctl15]
    Il mio problema non è aprire la maschera A o B in base all'indice ma ad assegnare il valore true o false variando automaticamente il riferimento del controllo nella maschera A.
  • Re: Valore di un controllo esterno alla maschera

    Perché non faincome ti ho detto...?
  • Re: Valore di un controllo esterno alla maschera

    Ho modificato, inserendo i 2 caratteri per l'indice, cliccando su Ret01 esce il messaggio Proprietà o metodo non supportato dall'oggetto
  • Re: Valore di un controllo esterno alla maschera

    @Alex , grazie infinite di cuore ho risolto utilizzando solo questa sintassi alla chiusura della mascheraB Forms!MascheraA.Controls(Me.varControllo)=True
  • Re: Valore di un controllo esterno alla maschera

    Il problema è che il Rettangolo non prende il focus, io avrei usato un commandbutton senza temi flat per semplificare il codice da scrivere.
    Avendo i rettangoli puoi scrivere 15 Eventi_Click oppure invece di definire Procedura Evento su Click scrivi il nome di una funzione che devi scrivere...
    Su Ret01 click scrivi =FireEvent(01)
    ...
    Su Ret15 Click scrivi =FireEvent(15)
    Quindi scrivi la funzione nel modulo della maschera1.
    
    Private Function FireEvent(index as integer)
        Docmd.OpenForm "Maschera2",,,,,,index
    End function
    
    Il resto è uguale e fa quello che hai chiesto alla chiusura della maschera2.
Devi accedere o registrarti per scrivere nel forum
7 risposte