[英]MS Access VBA convert query output to Excel format but not saving anywhere
我一直在嘗試使用傳輸電子表格方法,但它們似乎需要輸出路徑。
我只需要找出如何進行給定查詢,然后簡單地“打開”包含查詢輸出的Excel文件即可。 我不需要實際保存在任何地方的文件。
您可以通過創建Excel實例(或獲取現有實例)並使用Excel.Range
對象的CopyFromRecordset
函數來打開文件而不保存文件。
假定您的數據在ADO記錄集中。 您需要具有對Microsoft Excel XX.0 Object Library
和Microsoft ActiveX數據對象XX庫`的引用(如果使用的是ADO。如果使用的是DAO,請使用所需的任何DAO引用)
我用它來抓取一個Excel應用程序或創建一個新的Excel應用程序,因為Excel尚未打開。 我使用WasANewInstanceReturned
來弄清楚最后需要如何清理Excel資源。 (顯然,如果其他人正在使用它,我不想退出它)。
Function GetExcelApplication(Optional ByRef WasANewInstanceReturned As Boolean) As Excel.Application
If ExcelInstanceCount > 0 Then
Set GetExcelApplication = GetObject(, "Excel.Application")
WasANewInstanceReturned = False
Else
Set GetExcelApplication = New Excel.Application
WasANewInstanceReturned = True
End If
End Function
然后搶那個實例
Dim ApXL As Excel.Application, WasANewInstanceReturned as Boolean
Set ApXL = GetExcelApplication(WasANewInstanceReturned)
添加工作簿
Dim wbExp As Excel.Workbook
Set wbExp = ApXL.Workbooks.Add
搶第一張紙
Dim wsSheet1 As Excel.Worksheet
Set wsSheet1 = wbExp.Sheets(1)
將記錄集的字段名稱放在第一行
Dim fld As ADODB.Field
Dim col As Integer
col = 1
With wsSheet1
For Each fld In rst.Fields
.Cells(1, col).Value = fld.Name 'puts the field names in the first row
End With
col = col + 1
Next fld
End With
然后將數據移到字段名稱下方
wsSheet1 .Range("A2").CopyFromRecordset rst
瞧! 您打開了一個excel文件,其中的數據尚未保存在任何地方!
通常,在執行任何此操作之前,我通常設置ApXL.ScreenUpdating = False
, ApXL.ScreenUpdating = True
。
我將根據您的需要將它們縫在一起。
必須將文件保存在Excel的某個位置才能打開它。
如果數據集足夠小,則可以使用復制/粘貼(此處沒有文件)。 否則,只需使用%TEMP%文件夾作為文件位置。
編輯:
獲取TEMP文件夾的一種簡單方法是使用=Environ("TEMP")
我打開並導出對Excel的查詢。 首先,我在excel中創建了一個工作表並將其保存。 然后,我在Access(2013)的vba部分中創建了一個模塊:
Option Compare Database
' Testtoexporttoexcel'
Function ExportQuerytoExcel()
On Error GoTo ExportQuerytoExcel_Err
' Exports the query to excel to a sheet named Nameofyoursheet
DoCmd.TransferSpreadsheet acExport, 10, "nameofyourquery", "yourPath:\nameofyourworkbook", False, "Nameofyour worksheet"
ExportQuerytoExcel_Exit:
Exit Function
ExportQuerytoExcel_Err:
MsgBox Error$
Resume ExportQuerytoExcel_Exit
End Function
-----then add another function that says:
Option Compare Database
Function OpenExcelFromAccess()
'Opens Excel to the chart
Dim MYXL As Object
Set MYXL = CreateObject("Excel.Application")
With MYXL
.Application.Visible = True
.workbooks.Open "Yourpath:\nameofyourworkbook"
End With
'Application.Quit
End Function
希望這會有所幫助,這是我第一次回答問題。 阿羅哈
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.