簡體   English   中英

MS Access VBA將查詢輸出轉換為Excel格式,但不保存在任何地方

[英]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 = FalseApXL.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM