Salve a tutti, mi presento
non sono un programmatore e non ho ne attestati, ne diplomi e ne lauree sono solo un autodidatta di informatica da circa 20 anni, lavoro per un'amministrazione pubblica - Croce Rossa Italiana Comitato Provinciale di Napoli, sono responsabile informatico e gestisco circa 50 pc in rete ed avendo il pacchetto Microsoft Access 2007 in dotazione mi sono cimentato (con l'aiuto dei newsgroup della Microsoft) a fare piccoli programmi per la gestione delle attività. Mi sono iscritto al vostro forum perchè vedo che vi interessate di diversi linguaggi di programmazione ed avrei un problema da chiedervi.
Facendomi aiutare dai newsgroup della Microsoft avevo chiesto diveso tempo fa se era possibile creare un pulsante in Access 2007 che mi filtrasse due tabelle ed esportarmi i risultati in foglio excel formattato sempre dal codice e mi consigliarono di inserire 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") 'Percorso del file excel
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(11, 1) = "N." 'Contatore di riga
excDoc.Worksheets(1).Cells(11, 2) = "Unità CRI" 'Cells(Riga,Colonna)
excDoc.Worksheets(1).Cells(11, 3) = "Cognome"
excDoc.Worksheets(1).Cells(11, 4) = "Nome"
excDoc.Worksheets(1).Cells(11, 5) = "Luogo Nascita"
excDoc.Worksheets(1).Cells(11, 6) = "Data Nascita"
excDoc.Worksheets(1).Cells(11, 7) = "Soci attivi"
excDoc.Worksheets(1).Cells(11, 8) = "Soci ordinari"
rst.MoveFirst ' mi sposto su primo record
n = 11
Do Until rst.EOF
If MyIDSocio = rst!ID Then GoTo ScriveData
n = n + 1
excDoc.Worksheets(1).Cells(n, 1) = Str(n - 11) '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
-------------------------------------------
Ora essendo che alcune delle nostre direttive sono cambiate ho cercato di modificare anche il codice sopra descritto ed ho visto che non mi funziona più ora non ricordo più cosa cavolo ho cambiato e vi chiedo aiuto nel farmi notare dove ho sbagliato.
Se avete da chiedermi altre notizie fate pure io sono disponibilissimo pur di risolvere urgentemente questo problema.
Grazie