28/01/2025 - fcaliandro ha scritto:
C'è qualcosa che si può fare durante la generazione del file excel con codice VBA?
Ciao, come ti hanno già risposto, certamente lo puoi fare e con diverse tecniche.
28/01/2025 - fcaliandro ha scritto:
1) Che presenti una larghezza colonna non fissa ma già adattata al contenuto della colonna stessa senza superare un valore massimo di larghezza (aprendo il file excel generato da Access, non si legge il contenuto delle celle, occorre allargare le colonne che sono tutte a lunghezza standard)
Mi soffermo sulla formattazione del file excel una volta che l'hai creato e ti faccio questo esempio per farti capire cosa potresti fare utilizzando uno dei tanti metodi... in questo caso tutto da Vba.
rea questa piccola demo...
Crea una tabella di nome MyTrasfExcel con questi dati: (un campo di tipo testo, numerico, data e valuta)
Per esempio crea una query di nome Qry_MyTrafExcel dove imposti i nomi delle colonne, le colonne da estrarre e da ordinare, etc etc..:
Quando ti soddisfa la selezione della query .... salva e chiudi
Adesso poniamo di voler creare un Excel in questa forma dove:
- Impostare la riga di intestazione con uno sfondo e i titoli centrati ein grassetto
- La riga di intestazione verrà bloccata in alto allo scorrere delle righe
- Le quattro colonne A B C D sono formattate secondo il loro specifico contenuto (Testo, Numerico, Data e Valuta)
- La colonna C viene impostato un colore di sfondo e di primo piano
- Le righe importare verranno poste in una griglia
ESEMPIO:
A questo punto prendi un modulo in VBA, incolla il codice sotto riportato
- imposta il percorso dove creare il file excel in xlsPath = "C:\youPath" e il nome del file excel da creare xlsName = "MyExcel.xlsx" (come test puoi lasciare questo nome)
- in questo esempio verrà eliminato se già esiste il file excel
- viene creato il nuovo file excel
- viene formattato per le sue quattro colonne A B C D
- premere F5 per eseguire il codice
Option Compare Database
Option Explicit
Sub ExportExcel()
' initialize variables and object
Dim xlApp As Object
Dim xlWorkbook As Object
Dim xlSheet As Object
Dim fullPath As String
Dim xlsPath As String
Dim xlsName As String
Dim trasfQuery As String
Dim lastRow As Long
' set excel path
xlsPath = "C:\youPath"
' set excel name
xlsName = "MyExcel.xlsx"
' set excelfullpath
fullPath = xlsPath & "\" & xlsName
' name query trasfer
trasfQuery = "Qry_MyTrasfExcel"
' check excel file if exist
If Dir(fullPath) <> "" Then Kill fullPath
' query export in the excel document
DoCmd.TransferSpreadsheet _
TransferType:=acExport, _
SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _
TableName:=trasfQuery, _
FileName:=fullPath, _
HasFieldNames:=True
' open excel file and format
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
Set xlWorkbook = xlApp.Workbooks.Open(fullPath)
Set xlSheet = xlWorkbook.Sheets(1)
' set display grid remove
xlSheet.Application.ActiveWindow.DisplayGridlines = False
' search last row
lastRow = xlSheet.Cells(xlSheet.Rows.Count, 1).End(-4162).Row
' format only A, B, C, D columns
With xlSheet.Range("A1:D1")
.Font.Bold = True ' bold font
.HorizontalAlignment = -4108 ' center
.Interior.Color = RGB(255, 255, 0) ' yellow background
.Font.Color = RGB(0, 0, 0) ' black color
End With
' add grid in the A, B, C, D columns
With xlSheet.Range("A1:D" & lastRow).Borders
.LineStyle = 1
.Weight = 2
.Color = RGB(0, 0, 0)
End With
' columns A format Text
With xlSheet.Columns("A")
.NumberFormat = "@"
.AutoFit
End With
' columns B format numeric and decimal point
With xlSheet.Columns("B")
.NumberFormat = "#,##0.000"
.AutoFit
End With
' columns C format date
With xlSheet.Columns("C")
.NumberFormat = "dd/mm/yyyy" ' Formato data
.AutoFit
End With
' column C format blue interior color and white fornt color
With xlSheet.Range("C2:C" & lastRow)
.Interior.Color = RGB(0, 0, 255)
.Font.Color = RGB(255, 255, 255)
End With
' columns D format currency
With xlSheet.Columns("D")
.NumberFormat = "#,##0.00 €"
.AutoFit
End With
' fix heading row
xlSheet.Rows("2:" & lastRow).Select ' Seleziona i dati
xlSheet.Application.ActiveWindow.FreezePanes = True
' set cursor
xlSheet.Cells(2, 1).Select
' document save and close
xlWorkbook.Save
xlWorkbook.Close False
xlApp.Quit
' object close
Set xlSheet = Nothing
Set xlWorkbook = Nothing
Set xlApp = Nothing
MsgBox "Completed export File: " & fullPath
End Sub
Con questa piccola e semplice demo puoi approfondire e studiarti come formattare le tue colonne del foglio excel appena creato.
Puoi sostituire la query con un qualsiasi altro tipo di recordset e implementare varie cose come i vari controlli per le validazioni e metodi vari a tuo piacimento.
Potrebbe essere un piccolo punto di partenza di come poter interagire tra VBA access e un Foglio Excel.
(Come esempio ti ho riportato solo alcuni tipi di formattazione, ma puoi ben capire che lo puoi implementare secondo le tue specifiche esigenze)