Richiesta di aiuto: sintassi non corretta in Visual Basic

di fcaliandro il
14 risposte

Buongiorno,

non riesco ad scrivere la riga Where di un OpenForm command in Visual Basic.

La condizione Where dovrebbe essere con due condizioni legate da un And.

DoCmd.OpenForm "OLD_REGISTER", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "'" And [OLD_REGISTER].[CLOSED] = No

Ricevo un errore come sotto in giallo: 

Run-time error '2465'

Microsoft Access can't find the field '|1' referred to in your expression.

Se mi limito alla condizione Where come sotto funziona tutto bene. Ma se aggiungo la seconda condizione [OLD_REGISTER].[CLOSED] = No ricevo errore.

La maschera che intendo aprire con il comando ha il nome OLD_REGISTER. Essa è basata sulla tabella dal nome OLD REGISTER.

Non riesco a capire/intuire la sintassi corretta da applicare...

Grazie in anticipo

14 Risposte

  • 30/06/2026 - fcaliandro ha scritto:

    Non riesco a capire/intuire la sintassi corretta da applicare...

    A naso, ti direi che l'ultimo apice doppio va alla fine:

    DoCmd.OpenForm "OLD_REGISTER", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "' And [OLD_REGISTER].[CLOSED] = No"
  • Grazie Sgrubak,

    nada anche con apice doppio non va.

    Ho provato anche questo ma non funge. Non da errore ma non mi trova alcun record:

    DoCmd.OpenForm "OLD_REGISTER", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "'" & "'And [OLD_REGISTER].[CLOSED] = No'"
  • A rigor di logica, se dici che il filtro funziona dichiarando Me.[VENDOR_NAME], analogamente devi dichiarare anche Me.[eccetera]. Secondo me non puoi scrivere un And collegando un "controllo di maschera" e un "campo di tabella".

    Prova a creare una query parametrica sfruttando il filtro che vorresti ottenere. Da essa potresti ricavare (almeno logicamente, non sintatticamente) come comporre la stringa che ti serve.

  • Grazie Osvaldo,

    ci provo.

  • Osvaldo,

    il tuo suggerimento mi è stato utile. Ho provato ad inserire solo la seconda condizione. Corretto la sintassi. Dopo l'esito positivo ho ricombinato con la prima condizione e il doppio filtro ha funzionato.

    Era un problema di apici..

    DoCmd.OpenForm "OLD_REGISTER", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "'" & "And [OLD REGISTER].[CLOSED] = No"
  • 01/07/2026 - fcaliandro ha scritto:

    Era un problema di apici..

    E in cosa differisce da quella che ti ho proposto io? A parte lo spazio mancante prima dell'And che però non inficia minimamente?

  • 01/07/2026 - fcaliandro ha scritto:

    Era un problema di apici..

    DoCmd.OpenForm "OLD_REGISTER", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "'" & "And [OLD REGISTER].[CLOSED] = No"

    Secondo me manca lo spazio prima dell'And (come suggeriva Sgrubak) perche' senno' attacca "And" alla stringa di testo.

    DoCmd.OpenForm "OLD_REGISTER", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "'" & " And [OLD REGISTER].[CLOSED] = No"
  • Sgrubak

    mi sembra che sia la stessa cosa che hai suggerito tu. Probabilmente avevo commesso un errore di digitazione.. ti ringrazio il tuo suggerimento era corretto

  • Grazie per il tuo messaggio Mailman.

    Per lasciare una traccia del risultato finale testato funzionante riporto di seguito la riga di codice che ho appena ricontrollato. Copiato ed incollato qui sotto.

    PS: Lo spazio prima dell' And sembra ininfluente (ho provato con e senza e non cambia nulla) 

    Senza il vs aiuto non ci sarei riuscito.

    DoCmd.OpenForm "OLD_REGISTER", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "'" & "And [OLD REGISTER].[CLOSED] = No"
  • 30/06/2026 - fcaliandro ha scritto:

    Buongiorno,

    non riesco ad scrivere la riga Where di un OpenForm command in Visual Basic.

    La condizione Where dovrebbe essere con due condizioni legate da un And.

    DoCmd.OpenForm "OLD_REGISTER", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "'" And [OLD_REGISTER].[CLOSED] = No

    Ricevo un errore come sotto in giallo: 

    Run-time error '2465'

    Microsoft Access can't find the field '|1' referred to in your expression.

    Se mi limito alla condizione Where come sotto funziona tutto bene. Ma se aggiungo la seconda condizione [OLD_REGISTER].[CLOSED] = No ricevo errore.

    La maschera che intendo aprire con il comando ha il nome OLD_REGISTER. Essa è basata sulla tabella dal nome OLD REGISTER.

    Non riesco a capire/intuire la sintassi corretta da applicare...

    Grazie in anticipo

    Il Campo [OLD_REGISTER].[CLOSED] di che tipo è...?
    Se è Booleano non può funzionare così perchè [No] non esiste come Booleanno [0/-1], se è testo nemmeno... mancano gli apici.

  • 01/07/2026 - fcaliandro ha scritto:

    mi sembra che sia la stessa cosa che hai suggerito tu

    Grazie della info. Se no non capivo dove sbagliavo io! XD

    01/07/2026 - @Alex ha scritto:

    Se è Booleano non può funzionare così perchè [No] non esiste come Booleanno [0/-1], se è testo nemmeno... mancano gli apici.

    Ho fatto una prova da nabbo in una query SQL direttamente nell'editor di Access e:

    • Se la condizione è Campo = No, filtra correttamente;
    • Se la condizione è Campo = Si, chiede il valore per il parametro Si come giustamente dici tu;
    • Se la condizione è Campo = 'No', rende errore per tipo non corrispondente, di nuovo come dici tu;
    • Se la condizione è Campo = -1, filtra correttamente.

    Che diavoleria è mai questa? Come fa a castare il "No" a casaccio?

  • 01/07/2026 - @Alex ha scritto:

    30/06/2026 - fcaliandro ha scritto:

    Buongiorno,

    non riesco ad scrivere la riga Where di un OpenForm command in Visual Basic.

    La condizione Where dovrebbe essere con due condizioni legate da un And.

    DoCmd.OpenForm "OLD_REGISTER", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "'" And [OLD_REGISTER].[CLOSED] = No

    Ricevo un errore come sotto in giallo: 

    Run-time error '2465'

    Microsoft Access can't find the field '|1' referred to in your expression.

    Se mi limito alla condizione Where come sotto funziona tutto bene. Ma se aggiungo la seconda condizione [OLD_REGISTER].[CLOSED] = No ricevo errore.

    La maschera che intendo aprire con il comando ha il nome OLD_REGISTER. Essa è basata sulla tabella dal nome OLD REGISTER.

    Non riesco a capire/intuire la sintassi corretta da applicare...

    Grazie in anticipo

    Il Campo [OLD_REGISTER].[CLOSED] di che tipo è...?
    Se è Booleano non può funzionare così perchè [No] non esiste come Booleanno [0/-1], se è testo nemmeno... mancano gli apici.

    Ciao Alex,

    il campo CLOSED della tabella OLD REGISTER è di tipo Yes/No

    Grazie

  • Perchè devi passare un [NO] da dove lo prendi quel dato...? (se fosse una CheckBox è già un Boolean, se fosse una Combo, basta avere 2 colonne, e prendere quella Numerica...

    Cbo Col(0)  Col(1)
    	SI		-1
    	NO		0

    Poi passi la Column(1)

    DoCmd.OpenForm "OLD_REGISTER", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "' And [OLD_REGISTER].[CLOSED] = " & cbool(TuoDato)

    Se [TuoDato] è unTesto per una qualche motivo che non capisco, allora metti un IIF:

    DoCmd.OpenForm "OLD_REGISTER", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "' And [OLD_REGISTER].[CLOSED] = " & cbool(IIF(TuoDato;-1;0))
  • Grazie Alex,

    il campo CLOSED è un booleano. Adesso gira correttamente con il codice che segue:

    DoCmd.OpenForm "OLD_REGISTER", , , "[VENDOR_NAME] =  '" & Me.[VENDOR_NAME] & "'" & "And [OLD REGISTER].[CLOSED] = No"
Devi accedere o registrarti per scrivere nel forum
14 risposte