MS Access VBA将查询输出转换为Excel格式,但不保存在任何地方

时间:2014-07-21 15:36:47

标签: excel vba ms-access excel-vba

我一直在尝试使用转移电子表格方法,但它们似乎需要输出路径。

我只需要了解如何接受一个给定的查询,然后简单地打开"打开"包含查询输出的Excel文件。我不需要实际保存在任何地方的文件。

3 个答案:

答案 0 :(得分:1)

您可以通过创建Excel实例(或抓取现有实例)并使用CopyFromRecordset对象的Excel.Range功能来打开文件而不保存文件。

这假设您的数据位于ADO记录集中。您需要引用Microsoft Excel XX.0 Object Library和Microsoft ActiveX Data Objects X.X Library`(如果您使用的是ADO。如果您使用DAO,则使用您需要的任何DAO引用)

我用它来抓取一个Excel应用程序或创建一个新的Excel已经没有打开。我使用WasANewInstanceReturned来计算最后需要清理Excel资源的方法。 (显然我不想退出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

我会让你根据自己的需要将它拼接在一起。

答案 1 :(得分:0)

文件必须保存在某处,以便Excel打开它 如果数据集足够小,您可以使用复制/粘贴(此处没有文件)。否则,只需使用%TEMP%文件夹作为文件位置。


编辑:
获取TEMP文件夹的一种简单方法是使用=Environ("TEMP")

答案 2 :(得分:0)

我打开并从访问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

希望这有帮助,这是我第一次回答问题。 阿罗哈