Se campo_booleano = Vero & campo_testo = "" non funziona

di il
5 risposte

Se campo_booleano = Vero & campo_testo = "" non funziona

Salve a tutti, rieccomi con un altro problemino.

Ho letto diverse cose qui sul forum ma non ne vengo a capo.

Ho una Maschera che contiene una sottoMaschera. All'interno di questa sottoMaschera ho 4 campi (ma quelli che mi interessano sono solo 2: Pagato e NrRicevuta). 

Quando clicco su Salva devo fare questo tipo di controllo:

If Pagato = Vero & NrRicevuta = “” Then
	MsgBox "Inserire il numero della ricevuta!", vbExclamation, "Attenzione"
	NrRicevuta.SetFocus
Else
	DoCmd.RunCommand acCmdSaveRecord

 Ok, ho visto che devo selezionare la Maschera Principale e la Sottomaschera ho fatto le seguenti prove come suggerito da Alex in 

https://www.iprogrammatori.it/forum-programmazione/access/riferimento-campo-sottomaschera-scheda-t19320.html

Me!NomeSubForm!NomeControllo.Value

che da me sarebbe

if Me!Pagamenti!Pagato.Value = Vero & Me!Pagamenti!NrRicevuta.Value = "" Then
	MsgBox "Inserire il numero della ricevuta!", vbExclamation, "Attenzione"
	Me!Pagamenti!NrRicevuta.SetFocus
Else
	DoCmd.RunCommand acCmdSaveRecord

Ma non funziona, nel senso che si attiva la msgbox ma riempendo il campo NrRicevuta continua ad uscire la msgbox e non mi fa salvare. Credo di aver capito che .Value non dovrebbe essere usato in quel modo su NrRicevuta. 

Ho visto un altro suggerimento sempre di Alex su 

https://www.iprogrammatori.it/forum-programmazione/access/valore-vuoto-una-textbox-t38466.html 

per castare il campo testo con lettura della lunghezza caratteri ho provato

if Me!Pagamenti!Pagato.Value = Vero & Len(Me!Pagamenti!NrRicevuta.Value & vbNullstring)=0 Then
	MsgBox "Inserire il numero della ricevuta!", vbExclamation, "Attenzione"
	Me!Pagamenti!NrRicevuta.SetFocus
Else
	DoCmd.RunCommand acCmdSaveRecord

Ma niente da fare. Per prova ho usato anche False esce sempre la msgbox, anche se il campo Pagato è su Falso e la Ricevuta è vuota. Ho provato diverse combinazioni in ogni caso.

 Insomma non ne vengo a capo. Sto studiandomi un po' di VBA ma mi ci vuole troppo tempo per capire tutti gli incastri. 

Qualcuno può dirmi qual è la giusta procedura? Grazie a tutti per l'aiuto

5 Risposte

  • Re: Se campo_booleano = Vero & campo_testo = "" non funziona

    10/09/2023 - Precius ha scritto:


    If Pagato = Vero & NrRicevuta = “” Then
    	MsgBox "Inserire il numero della ricevuta!", vbExclamation, "Attenzione"
    	NrRicevuta.SetFocus
    Else
    	DoCmd.RunCommand acCmdSaveRecord

    Proprio non vuoi abbandonare l'idea di scrivere in Italiano ….

    If Pagato AND len(NrRicevuta & "") = 0 Then

    Ovvero : Se Pagato E manca il n° di ricevuta …

  • Re: Se campo_booleano = Vero & campo_testo = "" non funziona

    Ciao max.riservo, certo che no, è la mia lingua. Ma dove ho scritto in italiano? Se ti riferisci a Vero guarda che è la versione di Access a trasformare True in Vero non io… 

    A parte questo scusa non capisco, tutta la pappardella della Me!Maschera!SottoMaschera!Campo va messa o no? perchè per come hai scritto sembrerebbe di no.

    Grazie perla risposta e buona domenica

  • Re: Se campo_booleano = Vero & campo_testo = "" non funziona

    In VBA si scrive sempre in inglese, quindi True/False. Hai usato erroneamente & che è un simbolo di concatenazione, devi scrivere And. Poi io separerei chiaramente le due condizioni usando le parentesi. Prova così

    If (Me!Pagamenti!Pagato.Value = True) And (Len(Me!Pagamenti!NrRicevuta.Value & vbNullstring)=0) Then

    …ignorando la logica intrinseca del tuo codice…

  • Re: Se campo_booleano = Vero & campo_testo = "" non funziona

    10/09/2023 - Precius ha scritto:


    Ma dove ho scritto in italiano? Se ti riferisci a Vero guarda che è la versione di Access a trasformare True in Vero non io… 

    Posso solo pensare che tu abbia una versione di Access diversa dalla mia : nella mia se scrivo in VBA “if CampoBool = vero then ” quando compilo ottengo giustamente errore (variabile non definita - riferita a vero), se scrivo If campoBool = … l'intellisense mi propone False o True.

    Comunque per testare un campo bool queste sono le modalità :

    Test per true :

    1 - If campobool then
    2 - If campobool = True then
    3 - If campobool <> False then

    La prima e la seconda sono equivalenti : io preferisco la prima (è più sintetica)

    La terza non la uso (confesso che non sono sicuro che venga considerato solo il True, potrebbe essere considerato come <> False anche il null).

    Test per false :

    1 - If NOT campobool then
    2 - If campobool = false then
    3 - If campobool <> true then

    Valgono le stesse considerazione esposte per il true …

    Per il resto :

    1 - If Pagato AND len(NrRicevuta & "") = 0 Then
    oppure 
    2 - If Me!Pagamenti!Pagato AND len(Me!Pagamenti!NrRicevuta & "") = 0 Then

    Alla fine si tratta di capire se il test lo esegui nella sottomaschera oppure nella maschera principale

    Nel caso, sostituendomi ad Osvaldo, indica i seguenti nomi :

    • Maschera Principale (come nome dellla maschera)
    • SottoMaschera (come nome della maschera)
    • Sottomaschera (come nome del controllo sottomaschera dopo che l'hai inserita nella maschera principale)
  • Re: Se campo_booleano = Vero & campo_testo = "" non funziona

    Mah, guarda, ogni volta che vado a capo nel codice scritto in inglese me lo trasforma in italiano, non so perchè.

    Questo è il motivo per il quale lo vedi in quel modo nel mio codice.

    Mi spiace ma ormai nemmeno ci penso più a modificarlo.

    cmq grazie ora funziona tutto

    ps: per Osvaldo, grazie per avermi chiarito la & che funziona da concatenazione, pensavo fosse un AND come in altri linguaggi

Devi accedere o registrarti per scrivere nel forum
5 risposte