21/04/2023 - Valecomme ha scritto:
Vi ringrazio per i consigli.
Proverò il collegamento con il foglio Excel…anche se non sono sicura di ottenere quello che mi serve.
Grazie ancora
Se ti fa comodo ho messo insieme due righe di codice che puoi modificare a tuo piacimento secondo le tue necessità.
Ho cercato di inserire più commenti possibili per renderlo comprensibile, ma in breve vado a spiegare la funzionalità.
- Scopo
- Esportare da Db Access Tabelle, Query o stringhe Sql Recordset, in un file Excel
- Formattazione righe colonne del nuovo File Excel creato: a tal fine si crea uno o più file Excel di comodo con la formattazione Voluta
- I file Excel così generati saranno già formattati come predisposto dai file di modello includendo eventuali Formule
- Modelli Esempio: ModelSheet001.xlsx
- Modelli Esempio: ModelSheet002.xlsx
- Come richiamare l'Export
- Poniamo di avere due query di selezione denominate Qry_ExportExcel e Qry_ExportExcel2
- la prima estrai i record per tutte le Città
- la seconda estrai i dati di una solo Città
- Poniamo di richiamare l'Export utilizzando un Button da Form come da esempio
Option Compare Database
Option Explicit
' EXPORT EXCEL BUTTON
Private Sub btnExportExcel_Click()
' export excel file 1
myExportExcel "Qry_ExportExcel", CurrentProject.Path & "\ModelSheet001.xlsx", _
CurrentProject.Path, "A5", "My title sheet exported", "A2"
' export excel file 2
myExportExcel "Qry_ExportExcel2", CurrentProject.Path & "\ModelSheet002.xlsx", _
CurrentProject.Path, "A5", "My title sheet exported del " & Format(Now, "dd/mm/yyyy"), "B2"
' export excel xx
' .... per ogni export può essere utilizzato un solo o più modelli di formattazione per i nuovi files excel da creare
End Sub
- In questo caso viene richiamata la Sub myExportExcel per eseguire due volte l'Export dei dati in due file excel
- Nel primo export si indica di utilizzare la Query “Qry_ExportExcel”
- si utilizza come modello di formattazione il file excel ModelSheet001.xlsx
- si inizia ad importare il recordset dalla cella A5
- si imposta un titolo (facoltativo) “My title sheet exported” nella cella “A2”
- Nel secondo export si indica di utilizzare la Query “Qry_ExportExcel2”
- si utilizza come modello di formattazione il file excel ModelSheet002.xlsx
- si inizia ad importare il recordset dalla cella A5
- si imposta un titolo (facoltativo) "My title sheet exported del ", più la data del giorno, nella cella “B2”
- n.b. ovviamente sarà anche possibile utilizzare un unico modello per tutti gli Export desiderati.
- La Sub che viene richiamata può essere posta in un modulo ed è la seguente:
Option Compare Database
Option Explicit
' By65Franco EXPORT TABLE OR QUERY TO EXCEL FILE WITH FORMATTING FROM AN EXCEL FILE TEMPLATE
' La Sub consente di exportare Tabelle, Query o Recordset ricavato da una stringa Sql,
' in un file di Excel con righe e colonne preformattate ricavate da file excel di modello.
' Una finestra di dialogo consente di indicare la path e il nome del file Excel che verrà popolato con i dati da exportare
'
' I Parametri richiesti sono:
' strObjToExport = Obbligatorio -> stringa nome Tabella/Query da Exportare
' strExcelModelPath = Obbligatorio -> stringa nome file Excel e Path del Modello da utilizzare
' per la formattazione del foglio di lavoro
' strExportExcelPath = Obbligatorio -> stringa Path di destinazione dove verrà salvato il file
' Excel che verrà popolato dall'Exportazione del Recordset
' strCellStart = Obbligatorio -> stringa nome Cella dalla quale avrà inizio l'Export
' strTitleSheetExport = Facoltativo -> stringa Titolo da impostare nel Foglio Excel Exportato
' strCellStartTitleSheeetExport = Facoltativo -> stringa nome Cella dalla quale avrà inizio il Titolo del
' Foglio Excel Exportato
' Eempio:
' myExportExcel "Qry_ForExport", "c:\MyPath\ModelExport.xlsx", "c:\MyPath\Export", "A5", "Title Sheet", "A2"
'
' - In questo esempio viene esportata la Query di nome Qry_ForExport
' - Viene utilizzato un modello per la formattazione del foglio excel esportato di nome ModelExport.xlsx in c:\MyPath\
' - Viene creato un nuovo file excel con il nome scelto nella finetra di Dialogo in c:\MyPath\Export
' La destinazione e il file excel vengono selezionati a proprio piacimento in FileDialog SaveAs
' - Viene utilizzata la cella A5 (Colonna A della riga 5) come inizio dell'Export dati nel foglio di lavoro
' - Viene riportato il titolo nel foglio excel "Title Sheet"
' - Viene riportato il titolo a partire dalla cella A2 (Colonna A della riga 2) nel foglio di lavoro
' ------------------------------------------------------------------------------------------------------------
Sub myExportExcel(strObjToExport As String, strExcelModelPath As String, strExportExcelPath As String, strCellStart As String, Optional strTitleSheetExport As String, Optional strCellStartTitleSheeetExport As String)
' check parameters
If strObjToExport = vbNullString Or _
strExcelModelPath = vbNullString Or _
strExportExcelPath = vbNullString Or _
strCellStart = vbNullString Then
MsgBox "Missing or incorrect parameters", vbCritical, "Error"
Exit Sub
End If
' check table or query if exists
If Not myCheckObj(strObjToExport) Then Exit Sub
' check file excel model if exists
If Len(Dir(strExcelModelPath, vbArchive)) = 0 Then
MsgBox "Excel template file [" & strExcelModelPath & "] not found", vbCritical, "Error"
Exit Sub
End If
' chek folder file excel exoprt if exists
If Len(Dir(strExportExcelPath, vbDirectory)) = 0 Then
MsgBox "Excel file destination folder to create [" & strExportExcelPath & "] not found", vbCritical, "Error"
Exit Sub
End If
' set and open file dialog Save As
Dim fDialog As Office.FileDialog
Set fDialog = Application.FileDialog(msoFileDialogSaveAs)
With fDialog
' set the title of the dialog box.
.Title = "Export Excel File"
' set filename SaveAs
.InitialFileName = strExportExcelPath & "\*.xlsx"
' show dialogbox
If .Show = True Then
' retrive fullpath and filename SaveAs
strExportExcelPath = .SelectedItems(1)
' set pointer
DoCmd.Hourglass True
' set scipting file system obj
Dim fs As New FileSystemObject
Set fs = CreateObject("Scripting.FileSystemObject")
' copy model excel and create new file excel
fs.CopyFile strExcelModelPath, strExportExcelPath, True
' set application excel
Dim appExcel As Excel.Application
Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = False
' set worbook and select sheet
Dim myWorkbook As Excel.Workbook
Set myWorkbook = appExcel.Workbooks.Open(strExportExcelPath)
myWorkbook.Sheets(1).Activate
' set sheet activated
Dim mySheet As Excel.Worksheet
Set mySheet = myWorkbook.ActiveSheet
' open recorset for copy records in to export file excel
Dim rsExport As DAO.Recordset
Set rsExport = DBEngine(0)(0).OpenRecordset(strObjToExport)
mySheet.Range(strCellStart).CopyFromRecordset rsExport
' set my title sheet exported [optional]
If strTitleSheetExport <> vbNullString And strCellStartTitleSheeetExport <> vbNullString Then mySheet.Range(strCellStartTitleSheeetExport) = strTitleSheetExport
mySheet.Range(strCellStart).Select
' close all object and save new workbook
Set fs = Nothing
Set mySheet = Nothing
myWorkbook.Save
myWorkbook.Close
Set myWorkbook = Nothing
appExcel.Quit
Set appExcel = Nothing
rsExport.Close
Set rsExport = Nothing
' set pointer
DoCmd.Hourglass False
' msg export completed
MsgBox "Export Completed" & vbCrLf & strExportExcelPath, vbInformation, "Info Export"
Else
' export cancelled
strExportExcelPath = vbNullString
MsgBox "Save cancelled" & vbCrLf & "Excel file export failed", vbInformation, "Info"
End If
End With
Set fDialog = Nothing
End Sub
__________________________________________________________________________________________________
' By65Franco CHECK IF TABLE OR QUERY EXISTS IN CURRENT DATABASE
Function myCheckObj(strNameOBJ As String) As Boolean
myCheckObj = True
Dim rsSys As DAO.Recordset
Set rsSys = DBEngine(0)(0).OpenRecordset("SELECT MSysObjects.* FROM MSysObjects " & _
"WHERE (Type=1 OR Type=4 OR Type=5 OR Type=6) AND name='" & strNameOBJ & "';")
If rsSys.EOF Then
MsgBox "Error: object [" & strNameOBJ & "] does not exist", vbCritical, "Error"
myCheckObj = False
End If
rsSys.Close
Set rsSys = Nothing
End Function
Leggere l'istruzioni riportate in testa alla Sub per un corretto utilizzo.
Ho cercato di commentare il più possibile al fine di poter gestire/modificare il codice a proprio piacimento.
- Nel primo Export si ottiene i dati relativi a tutte le Città con la formattazione preimpostata sul primo Modello
- Viene creato un nuovo File Excel con il nome e la path impostati nella Diaolog SaveAs
- Nel secondo Export si ottiene i dati relativi a una Città con la formattazione preimpostata sul secondo Modello
- Viene creato un nuovo File Excel con il nome e la path impostati nella Diaolog SaveAs
N.B.
Questo vuole essere solo un piccolo esempio di come poter formattare in automatico un foglio Excel ed essere popolato con i dati di un recordset da Vba Access.
La fantasia e le varie necessità possono essere realizzate anche con questo metodo… ma non è l'unico.