Newsgroup: it.comp.appl.access
Titolo: Problema con esportazione filtrata in excel

Salve a tutti,
un po di tempo fa ho avuto bisogno di esportare alcuni dati filtrati da una sottomaschera, ed avevo risolto il problema grazie al vostro aiuto, ora pero' si è verificato un problema molto grande che vi spiego subito.
Ho due tabelle una nominata SOCI e l'altra PAGAMENTI nei SOCI ci sono i dati dei soci e nei PAGAMENTI ci sono le date dei pagamenti effettuati, per esportare in excel ho creato una maschera con due caselle di testo "Dalla data - alla Data " un pulsante esporta in excel, in evento su clic ho inserito questo codice
**********************************
Private Sub Comando4_Click()
On Error GoTo gestErrori
Dim excApp As Object
    Dim excDoc As Object
    Dim blOpen As Boolean
    Dim rst As Recordset
    Dim n As Integer
 
   On Error Resume Next
    blOpen = True
    Set excApp = GetObject(, "Excel.Application")
 
    If Err.Number = 429 Then
        Set excApp = CreateObject("Excel.Application")
        blOpen = False
        Err.Number = 0
            End If
    On Error GoTo gestErrori
 
    Set excDoc = excApp.Workbooks.Open("w:\CRI SOCI\CONSOLIDATO.xlsx")
    excApp.Visible = True
Set DB = CurrentDb()
Dim strsql, mystart, myfinish As String
mystart = Right(Forms![CONSOLIDATO]![Dalla data], 4)
myfinish = Right(Forms![CONSOLIDATO]![Alla data], 4)
 
strsql = "SELECT 
SOCI.ID
, SOCI.GruppoDi, SOCI.Cognome, SOCI.Nome, SOCI.LuogoNascita, SOCI.DataNascita,PAGAMENTI.Att, PAGAMENTI.DataVer, Year(Pagamenti.DataVer) AS AnnoData " _
        & "FROM SOCI LEFT JOIN PAGAMENTI ON 
SOCI.ID
 = PAGAMENTI.IdSoc " _
        & "WHERE Year(Pagamenti.DataVer) between '" & Year(Forms![CONSOLIDATO]![Dalla data]) & "' And '" & Year(Forms![CONSOLIDATO]![Alla data]) & "' " _
        & "ORDER BY SOCI.Cognome, SOCI.Nome, PAGAMENTI.DataVer"
 
 
    Debug.Print ("SQL: " + strsql)
    Set rst = DB.OpenRecordset(strsql)
 
    'contatore righe ESPORTA_EXCELQuery
 
 
   'Copia tutti i record di ESPORTA_EXCELQuery nel file excel
 
    'testata
    excDoc.Worksheets(1).Cells(1, 1) = "N."
    excDoc.Worksheets(1).Cells(1, 2) = "Unità CRI"
    excDoc.Worksheets(1).Cells(1, 3) = "Cognome"
    excDoc.Worksheets(1).Cells(1, 4) = "Nome"
    excDoc.Worksheets(1).Cells(1, 5) = "Luogo Nascita"
    excDoc.Worksheets(1).Cells(1, 6) = "Data Nascita"
    excDoc.Worksheets(1).Cells(1, 7) = "Soci attivi"
    excDoc.Worksheets(1).Cells(1, 8) = "Soci ordinari"
 
 
    rst.MoveFirst ' mi sposto su primo record
    n = 1
    Do Until rst.EOF
   If MyIDSocio = rst!ID Then GoTo ScriveData
 
    n = n + 1
 
    excDoc.Worksheets(1).Cells(n, 1) = Str(n - 1) 'Contatore di riga
    excDoc.Worksheets(1).Cells(n, 2) = rst!GruppoDi 'Cells(Riga,Colonna)
    excDoc.Worksheets(1).Cells(n, 3) = rst!COGNOME
    excDoc.Worksheets(1).Cells(n, 4) = rst!nome
    excDoc.Worksheets(1).Cells(n, 5) = rst!LuogoNascita
    excDoc.Worksheets(1).Cells(n, 6) = Format(rst!DataNascita, "dd/mm/yyyy")
    excDoc.Worksheets(1).Cells(n, 7) = rst!CompCri
ScriveData:
    If Val(Right(rst!DataVer, 4)) = Val(Right([Forms]![CONSOLIDATO]![Alla data], 4)) - 2 Then 'qui filtra la data del 1° anno cioe' 2009
        excDoc.Worksheets(1).Cells(n, 8) = Format(rst!DataVer, "dd/mm/yyyy")
    End If
    If Val(Right(rst!DataVer, 4)) = Val(Right([Forms]![CONSOLIDATO]![Alla data], 4)) - 1 Then 'qui  filtra la data del 2° anno cioe' 2010
        excDoc.Worksheets(1).Cells(n, 9) = Format(rst!DataVer, "dd/mm/yyyy")
    End If
     If Val(Right(rst!DataVer, 4)) = Val(Right([Forms]![CONSOLIDATO]![Alla data], 4)) Then
        excDoc.Worksheets(1).Cells(n, 10) = Format(rst!DataVer, "dd/mm/yyyy")  'qui filtra la data del 3° anno cioe' 2011
     End If
MyIDSocio = rst!ID
    rst.MoveNext 'passa al prossimo record
 
   Loop
 
   rst.Close
   Set rst = Nothing
  If Not blOpen Then
        excDoc.Close savechanges:=True
        excApp.Application.Quit
    End If
esci:
    Set excDoc = Nothing
    Set excApp = Nothing
    Exit Sub
gestErrori:
    MsgBox Err.Number & " - " & Err.Description
    GoTo esci
End Sub
******************************
e quando clicco mi esporta tutto in un foglio excel precedentemente creato e salvato nel path citato nel codice, fin qui mi va alla perfezione solo che.
Al termine dell'esportazione dando un'occhiata al file excel in alcuni dati non coincidono con quello salvato nel database e cioe' esportando le date di pagamento una persona che ha pagato nel 2011 - 2012 e nel 2013 non escono allineate con la stessa persona ma ad ogni data mi scrive sulla riga successiva cosi' mi ritrovo in tre righe di excel la stessa persona con con la relativa data di pagamento ad ogni anno. Mentre dovrebbe esportare tutto su di una riga sola visto che ci sono le tre colonne delle date.
 
Mi scuo per un post cosi' lungo lo faccio per farmi capire bene del problema grosso che ho, ringrazio in anticipo chiunque mi potra' risolvere il problema .

 Val(Right([Forms]![CONSOLIDATO]![Alla data], 4)) Then
 
sarebbe un paragone dei anni di due date, cioè
 
If Year(rst!DataVer) = Year(Forms!CONSOLIDATO!Alla data) Then
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
 

 Access FAQ:  
http://www.donkarl.com/it
 
 
Salve grazie della risposta ho fatto la sostituzione del primo gruppo di codice che mi ha consigliato sopra ed ho anche sostituito l'ultima riga di codice che mi consiglia nella sua risposta, la soluzione è che mi si apre il file consolidato ma scrive nessun dato al suo interno, chiudo il file e in access mi esce una finestra con su scritto "3265 - Elemento non trovato i questo insieme" ora cosa posso ancora fare? Grazie

 ancora fare?
 
Incolla il codice attuale.


 Access FAQ:  
http://www.donkarl.com/it
 
 
Ho lasciato il codice che mi hai consigliato senza inserire l'ultima riga del paragone e funziona alla grande riesce ad esportare bene i dati ma comunque mi escono sempre sballati e sarebbe il socio che ha pagato la quota nel 2010 nel 2011 e nel 2013 mi esce solo quella del primo anno in questione e sarebbe 2010 nella colonna anno 2010, le restanti date mi sembra che mi ricrea lo stesso socio sotto al primo e mi scrive la data del secondo anno 2011 nella colonna 2012 e cosi anche con il 2013 sempre su una nuova riga cioe' non tutto su una sola riga quello che dovrebbe fare.
Ho poi provato a sostituire l'ultima riga di codice che mi proponi e nel codice quando prova ad andare sulla riga successiva mi esce questo errore " Errore di compilazione: Previsto: separatore di elenco oppure )" e mi evidenzia la fine del codice sulla riga e cioe' " data)" alla fine prima di then.
Cosa posso fare? Grazie