Pour éviter les fichiers en double, j'ajoute généralement la date et l'heure au nom de fichier. Cela a également l'avantage de permettre à l'utilisateur de conserver plusieurs versions du même rapport.
Public Sub ExportToExcel(objectToExport As Variant, _
outPutType As AcOutputObjectType, _
filename As String, _
Optional outputFormat = acFormatXLS)
' Construct the filename using the date and time '
Dim fnamebase As String
Dim ext As String
ext = Mid$(filename, InStrRev(filename, "."))
fnamebase = Left$(filename, Len(filename) - Len(ext)) _
& Format(Now, "-yyyymmdd-hh\hmm")
' check if there is another file with the same name '
' append (1), (2) until we find a free slot '
Dim fname As String
Dim count As Integer
fname = fnamebase & ext
Do While Len(Dir(fname)) > 0
count = count + 1
fname = fnamebase & "(" & count & ")" & ext
Loop
' Now we're fairly sure no identical filename exists '
DoCmd.OutputTo objectType:=outPutType, _
ObjectName:=objectToExport, _
outputFormat:=outputFormat, _
OutputFile:=fname, _
Encoding:=vbUnicode
End Sub
Vous pouvez désormais exporter les requêtes et les tables:
requêtes au format Excel 2007/2010 (format XLXS disponible uniquement en Access2007/2010):
ExportToExcel "qrySupplierList", acOutputQuery, "D:\suppliers.xlsx", acFormatXLSX
Une table dans un fichier texte:
ExportToExcel "Suppliers", acOutputTable, "D:\suppliers.txt", acFormatTXT
Maintenant, TransferSpreadSheet
est mieux à des tables transférer vers Excel, vous pouvez préférer utiliser que l'on place:
Public Sub ExportTableToExcel(tableName As String, _
filename As String, _
Optional spreadSheetType = acSpreadsheetTypeExcel8)
' Construct the filename using the date and time '
Dim fnamebase As String
Dim ext As String
ext = Mid$(filename, InStrRev(filename, "."))
fnamebase = Left$(filename, Len(filename) - Len(ext)) _
& Format(Now, "-yyyymmdd-hh\hmm")
' check if there is another file with the same name '
' append (1), (2) until we find a free slot '
Dim fname As String
Dim count As Integer
fname = fnamebase & ext
Do While Len(Dir(fname)) > 0
count = count + 1
fname = fnamebase & "(" & count & ")" & ext
Loop
' Now we're fairly sure no identical filename exists '
DoCmd.TransferSpreadsheet TransferType:=acExport, _
spreadSheetType:=spreadSheetType, _
tableName:=tableName, _
filename:=fname, _
HasFieldNames:=True
End Sub
Une que vous utilisez comme ceci:
Pour exporter une table au format Excel97:
ExportTableToExcel "Supplier", "D:\Suppliers.xlx"
Pour exporter au format XLSX (à partir d'Access 2007/2010 uniquement): ExportTableToExcel "Supplier", "D:\Suppliers.xlsx", acSpreadsheetTypeExcel12Xml
Il n'y a pas une option pour supprimer un fichier externe. –
'Kill [PathToFile]' supprimera les fichiers externes, mais vous devrez gérer l'erreur générée si le fichier n'est pas là. –