Ci sono diversi modi per arrivare al risultato,
il piu classico è quello di fare una maschera che prenda i dati dalla query
e poi in funzione dello stato della tua casella di controllo
imposti la proprieta "Visibile" del campo interessato a si oppure no


Me.Nomecampo.Visible = True ( oppure false )

__________________________________________________ ____________________

ma tu hai fatto riferimento specifico a quando viene lanciata la query
pertanto seguiamo la strada di modificare la query stessa

( facci sapere se habbiamo sbagliato strada )
__________________________________________________ __________________

cominciamo a
__ creare la tabella
__ Inserire dati
__ Creare una query semplice da modificare dopo

Consiglio di aprire un nuovo file di access
e in un nuovo modulo ci metti questo codice che ti
imposta le basi

( quando sei nella finestra di VBA per lanciare la funzione
trovi un pulsante a forma di Triangolo o freccia verde)

codice:
Public Function ImpostaBase()
Dim ssq As String

' _______ Cominciamo a creare una semplicissima tabella _________________________
ssq = ""
ssq = ssq & "CREATE TABLE T04 "
ssq = ssq & "("
ssq = ssq & "Id int identity(1,1) CONSTRAINT [PrimaryKey] Primary Key, "
ssq = ssq & "Ca1 nvarchar, "
ssq = ssq & "Ca2 nvarchar, "
ssq = ssq & "Ca3 nvarchar"
ssq = ssq & ")"

CurrentProject.Connection.Execute ssq
ssq = ""

'__________ Inseriamo un po di dati _______________________________________________
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 10, 'k', 'kkk', 'u' );"
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 2, 'ggg', 'lll', 'u' );"
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 12, 'rr', 'aaa', 'u' );"
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 17, 'yy', 'ttt', 'u' );"
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 3, 'sss', 'yyy', 'u' );"
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 1, 'hhh', 'kkk', 'u' );"
CurrentProject.Connection.Execute "INSERT INTO T04 ( Id, Ca1, Ca2, Ca3 ) VALUES ( 19, 'uuu', '222', 'u' );"

'________ Creo una vista ______________________________________
ssq = "CREATE VIEW Q04 AS SELECT T04.Id, T04.Ca1, T04.Ca2, T04.Ca3 FROM T04;"
CurrentProject.Connection.Execute ssq

'  diamo un messaggio di conferma
MsgBox ("Creato tabella __ Inserito dati ___ Creato vista")

'  NB   Manca la gestione degli errori

End Function
ora clicca con il mouse nella finestra del DB ( non VBA )
e premi il tasto F5 per aggiornare lo schermo
( oppure chiudi e riapri il DB )
__________________________________________________ ____________________________


Adesso puoi creare una Nuova maschera con solamente 1 casella di controllo
( Chiamiamola "CaCon" )

e sull'evento "dopo aggiornamento" di CaCon lanciamo questa routine

( adesso il modulo non è piu quello di prima ma bensi
si tratta del modulo interno della maschera )

codice:
Private Sub CaCon_AfterUpdate()
' dopo aggiornamento della casella di controllo  di nome " CaCon"
' ti modifica la stringa della query

Dim stq As String
stq = ""


If Me.CaCon Then
' se la casella di controllo è "spulciata "   prende i campi  1 e 3
    stq = "SELECT T04.Id, T04.Ca1, T04.Ca3 FROM T04;"
    CurrentDb.QueryDefs("Q04").SQL = stq
    stq = ""
Else
' se invece non è "spulciata"                  prende solo il campo  2
    stq = "SELECT T04.Id, T04.Ca2 FROM T04;"
    CurrentDb.QueryDefs("Q04").SQL = stq
    stq = ""
End If


' adesso per conferma mettiamo nel messaggio la stringa della query cosi come modificata,
'   osserva che la stringa non arriva  da quanto scritto sopra,
'   ma VBA  legge direttamente la stringa all'interno della query e la mette nel messaggio

Dim StringaQuery As String
StringaQuery = CurrentDb.QueryDefs("Q04").SQL
MsgBox StringaQuery


End Sub



Facci sapere


.