vediamo un pò:

codice:
'attivo la connessione 
Set tabella1.ActiveConnection = cn 
'qui uso delle combo box per aggiungere la tabella che andremo a creare nel dbgrig "RISULTATI" 
CMBtab.AddItem "RISULTATI" 
If CMBtab.ListIndex = 5 Then 
ADOtab.RecordSource = "RISULTATI" 
ADOtab.Refresh 
End If 
query1 = "SELECT * FROM RISULTATI" 
On Error Resume Next 'serve per far avanti il codice nonstante si sia verificato un errore 
tabella1.Open query1 
If Err.Number = -2147217865 Then ' codice di errore per tabella non trovata 
tabella1.Close 
'fai la query di creazione 
query1 = "SELECT ALLIEVI.codiceA,ALLIEVI.nome,ALLIEVI.cognome," _ 
         & "COUNT(*) AS Risposte_Esatte INTO RISULTATI " _ 
         & "FROM ALLIEVI,TEST_INIZIALE,RISPOSTE " _ 
         & "WHERE ALLIEVI.codiceI=TEST_INIZIALE.codiceI " _ 
         & "AND ALLIEVI.codiceA=RISPOSTE.codiceA " _ 
         & "AND RISPOSTE.risI=TEST_INIZIALE.risEs " _ 
         & "GROUP BY ALLIEVI.codiceA,ALLIEVI.nome,ALLIEVI.cognome" 
'codice per cancellare la tabella nel caso in cui voglia rispingere il comando 
Else 
tabella1.Close 
query1 = "DROP TABLE RISULTATI" 
cn.Execute query1 
'fai la query di creazione 
query1 = "SELECT ALLIEVI.codiceA,ALLIEVI.nome,ALLIEVI.cognome," _ 
        &"COUNT(*) AS Risposte_Esatte INTO RISULTATI " _ 
        & "FROM ALLIEVI,TEST_INIZIALE,RISPOSTE " _ 
        & "WHERE ALLIEVI.codiceI=TEST_INIZIALE.codiceI " _ 
        & "AND ALLIEVI.codiceA=RISPOSTE.codiceA " _ 
        & "AND RISPOSTE.risI=TEST_INIZIALE.risEs " _ 
        & "GROUP BY ALLIEVI.codiceA,ALLIEVI.nome,ALLIEVI.cognome" cn.Execute query1 
End If 
On Error GoTo 0 ' serve per eliminare il resume next 
'poi apri la tabella e la scorri 
query1 = "SELECT * FROM RISULTATI" 
tabella1.Open query1 
Do While Not tabella1.EOF 
risultato1 = tabella1!codiceA & Chr(9) _ 
& tabella1!nome & Chr(9) _ 
& tabella1!cognome & Chr(9) _ 
& tabella1!Risposte_Esatte 
FLEXquery.AddItem risultato1 
tabella1.MoveNext 
Loop 
End If 
End Sub
VA MEGLIO?