簡體   English   中英

在VBA中以讀/寫模式從Access導出查詢到Excel

[英]To export query from Access to Excel in Read/Write mode in VBA

下面是從Access導出名為'LatestSNR'的查詢到Excel的代碼;

Public Sub Expdata()
    Dim rst As DAO.Recordset
    Dim Apxl As Object
    Dim xlWBk, xlWSh As Object
    Dim PathEx As String
    Dim fld As DAO.Field

    PathEx = Forms("Export").Text14 'path comes from the directory given in form
    Set Apxl = CreateObject("Excel.Application")
    Set rst = CurrentDb.OpenRecordset("LatestSNR")
    Set xlWBk = Apxl.Workbooks.Open(PathEx)
    'xlWBk.ChangeFileAccess xlReadWrite
    Set xlWBk = Workbook("PathEx")
    Apxl.Visible = True

    Set xlWSh = xlWBk.Worksheets("Metadatasheet")

    xlWSh.Activate
    xlWSh.Range("A2").Select

    For Each fld In rst.Fields
        Apxl.ActiveCell = fld.Name
        Apxl.ActiveCell.Offset(0, 1).Select
    Next
    rst.MoveFirst

    xlWSh.Range("A2").CopyFromRecordset rst
    xlWSh.Range("1:1").Select

    ' selects all of the cells
    Apxl.ActiveSheet.Cells.Select

    ' selects the first cell to unselect all cells
    xlWSh.Range("A2").Select
    rst.Close
    Set rst = Nothing

   ' Quit excel
    Apxl.Quit


End Sub

執行代碼后,查詢將轉移到Excel工作表,並以“只讀”模式查看。 如果我嘗試保存它,則會生成excel文件的副本。 可以在讀/寫模式下打開Excel嗎? 以便保存工作簿,並將查詢重復傳輸到同一工作簿。

通常,導出的Excel文件不應處於只讀模式。 在處理過程中的某個地方,您無法正確結束Excel實例。 檢查的一個好方法是在進程下的任務管理器中查看EXCEL.EXE是否仍然存在。 如果是,請結束該過程並進行以下代碼調整:

首先,正確關閉並保存您的Excel文件。 退出需要保存或不保存工作簿的確認,因為它意味着關閉您初始化的Excel應用程序,而不是目標工作簿。 所以在Apxl.Quit之前Apxl.Quit

xlWBk.Close True

其次,正確地取消初始化Excel對象以釋放計算機資源。 這不是必需的,只是良好的編碼實踐:

Set Apxl = Nothing
Set xlWBk = Nothing
Set xlWSh = Nothing

順便說一下,除非你做細微的編碼和格式化,否則有一個內置的Access to Excel功能可以將字段名和記錄集一起導出: DoCmd.TransferSpreadsheet

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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