2009-09-18 9 views
0

J'ai besoin d'aide pour trouver une méthode permettant à un utilisateur d'exporter les résultats d'une requête dans un fichier xls sur un événement de clic de bouton. J'ai essayé d'utiliser une macro Sortie vers, mais cela ne fonctionne pas pour une requête contenant plus de 30 000 enregistrements.Résultats de la requête d'exportation MS Access VBA

Merci d'avance

+0

Pouvez-vous poster votre code? (Sur ma réponse vous avez indiqué que vous avez essayé le docmd.) – JeffO

+0

Quelle est la version de destination d'Excel? La limitation sur le nombre de lignes est incontestablement une limite Excel, pas une limite d'accès. Excel 2007 augmente le nombre de lignes, BTW. –

+1

En fait, Tony, je pense que l'étiquette Access 2002 est une information utile ici, car elle limite les formats d'exportation. Bien sûr, la façon dont je pense que les balises devraient être utilisées est que MS-ACCESS seulement devrait être utilisé et la version spécifique indiquée dans la question, mais vous avez enlevé le tag mais n'a pas ajouté la version dans le texte de la question. Cela perd de l'information utile, à mon avis. –

Répondre

1

Pouvez-vous utiliser VBA?

IntelliSense vous aidera, mais prendre en main:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "my_query_name", "C: \ myfilename.xls"

Note: vous pouvez avoir une autre version Excel « my_query_name » est le nom de votre requête ou d'une table vous devez définir l'emplacement du fichier à l'emplacement approprié \ nom .extension

Plus d'info: http://msdn.microsoft.com/en-us/library/bb214134.aspx

+0

j'ai essayé cela mais je continue à obtenir un fichier n'existe pas dans cette erreur de localisation. – zSynopsis

4

Vous pouvez envisager d'utiliser Automation pour créer une feuille de calcul Excel et la remplir par vous-même plutôt que d'utiliser une macro.

Voici une fonction que j'ai utilisée dans le passé pour faire exactement cela.

Public Function ExportToExcel(FileToCreate As String, ByRef rst As ADODB.Recordset) 
'Parms:  FileToCreate - Full path and file name to Excel spreadsheet to create 
'   rst - Populated ADO recordset to export 

On Error GoTo Err_Handler 

Dim objExcel As Object 
Dim objBook As Object 
Dim objSheet As Object 

'Create a new excel workbook; use late binding to prevent issues with different versions of Excel being 
'installed on dev machine vs user machine 
Set objExcel = CreateObject("Excel.Application") 
Set objBook = objExcel.Workbooks.Add 

'Hide the workbook temporarily from the user 
objExcel.Visible = False 

objBook.SaveAs (FileToCreate) 

'Remove Worksheets so we're left with just one in the Workbook for starters 
Do Until objBook.Worksheets.Count = 1 
    Set objSheet = objBook.Worksheets(objBook.Worksheets.Count - 1) 
    objSheet.Delete 
Loop 

Set objSheet = objBook.Worksheets(1) 

rst.MoveFirst 

'Use CopyFromRecordset method as this is faster than writing data one row at a time 
objSheet.Range("A1").CopyFromRecordset rst 

'The UsedRange.Rows.Count property can be used to identify the last row of actual data in the spreadsheet 
'This is sometimes useful if you need to add a summary row or otherwise manipulate the data 
'Dim lngUsedRange As Long 
'lngUsedRange = objSheet.UsedRange.Rows.Count 

'Save the spreadsheet 
objBook.Save 

objExcel.Visible = True 

ExportToExcel = True 

Err_Handler: 
    Set objSheet = Nothing 
    Set objBook = Nothing 
    Set objExcel = Nothing 
    DoCmd.Hourglass False 

    If Err.Number <> 0 Then 
     Err.Raise Err.Number, Err.Source, Err.Description 
    End If 
End Function 
+0

ce code fonctionne bien pour moi, mais le seul problème est que les données Excel n'ont pas d'en-têtes .. comment puis-je l'ajouter? –

Questions connexes