Ho fatto delle correzioni al codice, leggi i commenti, perchè molto probabillmente facendo rs.movenext vai a eof e ti dà errore. Se non è chiaro qualcosa chiedi. Ciao

codice:
'For i = 1 To rs.RecordCount
'prima di questo ci deve essere la select con open sul recordset
Do Until rs.EOF
    If UCase(Left(rs("cdsuc_alu0"), 4)) = "FIAA" Or UCase(Left(rs("cdsuc_alu0"), 4)) = "FI1A" Then
        cont_maternestra = cont_maternestra + 1
    End If
    
    
    classeb = Trim(Left(rs("clat_alu0"), 1))
    
    If IsNull(Trim(Left(rs("citd_alu0"), 3))) Then
        cont_emptycitt = cont_emptycitt + 1
        'cittadinanze vuote
    End If

    Me.txt_cittàvuote.Text = cont_emptycitt

    If tmp_cdalu = rs("cdsuc_alu0") Then
        sw2 = False


        If UCase(Left(rs("citd_alu0"), 3)) <> "ITA" And Left(rs("citd_alu0"), 3) <> "" Then
            vett_cdsuc_alu0(X) = rs("cdsuc_alu0")
    
            ' On Error Resume Next
            vett_naz(X) = UCase(CStr(Left(rs("citd_alu0"), 3) & ""))
    
            X = X + 1
    
            tmp = conta_sessi1(cont_femmine1, cont_maschi1)
            tmp = conta_sessi2(cont_femmine2, cont_maschi2)
            tmp = conta_sessi3(cont_femmine3, cont_maschi3)
            tmp = conta_sessi4(cont_femmine4, cont_maschi4)
            tmp = conta_sessi5(cont_femmine5, cont_maschi5)
    
            m = m + 1
            f = f + 1
    
        Else
            'perchè questo ??????????????? ti sposti sul record successivo
            'quello che leggi dopo è un altro record e potrebbe già essere EOF e darti errore (***)
            rs.MoveNext
        End If

    Else
        sw2 = True
        If UCase(Left(rs("citd_alu0"), 3)) <> "ITA" And Left(rs("citd_alu0"), 3) <> "" Then
        
            vett_cdsuc_alu0(X) = Trim(rs("cdsuc_alu0"))
        
        
            ' temp_var = Left(rs.Fields("citd_alu0"), 3)
            
            ' On Error Resume Next
            vett_naz(X) = UCase(CStr(Left(rs("citd_alu0"), 3) & ""))

            X = X + 1

            cont_femmine1 = 0
            cont_maschi1 = 0
            cont_femmine2 = 0
            cont_maschi2 = 0
            cont_femmine3 = 0
            cont_maschi3 = 0
            cont_femmine4 = 0
            cont_maschi4 = 0
            cont_femmine5 = 0
            cont_maschi5 = 0
            
            tmp = conta_sessi1(cont_femmine1, cont_maschi1)
            tmp = conta_sessi2(cont_femmine2, cont_maschi2)
            tmp = conta_sessi3(cont_femmine3, cont_maschi3)
            tmp = conta_sessi4(cont_femmine4, cont_maschi4)
            tmp = conta_sessi5(cont_femmine5, cont_maschi5)

            m = m + 1
            f = f + 1

            ' For a = 1 To 10000
            ' vett_naztemp(a) = ""
            ' Next a

            tmp_cdalu = rs("cdsuc_alu0")
'        Else
        End If
    End If

    'questo è fuori dalle if quindi se sei entrato (***) sei sul record successivo ATTENZIONE
    If rs("citd_alu0") = cittadinanza Then
    
    Else
    
        cittadinanza = UCase(CStr(Left(rs("citd_alu0"), 3) & ""))
        vett_cdsuc_alu0(X) = Trim(rs("cdsuc_alu0"))
        vett_naz(X) = UCase(CStr(Left(rs("citd_alu0"), 3) & ""))
        X = X + 1
        cont_femmine1 = 0
        cont_maschi1 = 0
        cont_femmine2 = 0
        cont_maschi2 = 0
        cont_femmine3 = 0
        cont_maschi3 = 0
        cont_femmine4 = 0
        cont_maschi4 = 0
        cont_femmine5 = 0
        cont_maschi5 = 0
        tmp = conta_sessi1(cont_femmine1, cont_maschi1)
        tmp = conta_sessi2(cont_femmine2, cont_maschi2)
        tmp = conta_sessi3(cont_femmine3, cont_maschi3)
        tmp = conta_sessi4(cont_femmine4, cont_maschi4)
        tmp = conta_sessi5(cont_femmine5, cont_maschi5)
        
        m = m + 1
        f = f + 1
    
    End If


    rs.MoveNext


    ProgressBar.Value = i
    DoEvents


Loop
PS: Spero di non aver fatto errori, perchè,logicamente, non ho potuto provarlo.