2016-08-03 87 views
0

我有一個將數據寫入Access數據庫的excel程序。在這個數據庫中,我有一個宏,它在運行時將數據複製到另一個excel文件中。我想編輯原始的excel程序,以便在將數據寫入Access數據庫之後,它會自動運行宏。現在,我已經設置了它,以便將數據寫入數據庫,然後打開數據庫,運行宏並關閉數據庫 - 這似乎有些不夠用。以下是訪問數據庫中的宏:在Access中運行宏而不打開Access

Sub copy() 



Dim strTable As String 
Dim strWorksheetPath As String 


strWorksheetPath = "FilePath" & "test.xlsx" 
strTable = "test" 

DoCmd.OutputTo acOutputTable, strTable, acFormatXLSX, strWorksheetPath 



End Sub 

程序中的相關代碼只是打開數據庫,調用宏並關閉它。如果有解決方法,根本不打開數據庫會很好。謝謝。

即只是爲了說清楚,我正在尋找一種方法來模仿上述代碼在Excel中,這樣我就不需要打開訪問數據庫了,也就是說,無論如何都要將訪問數據傳輸到excel工作簿,而不使用訪問VBA。

+1

您不能運行,這是包含在Access數據庫,除非該數據庫是Access會話開放代碼。 – HansUp

+0

有沒有辦法從訪問中複製代碼而無需打開訪問權限?即使用Excel-VBA代碼來模擬上面的代碼? – user33484

+0

不,連接是好的 - 但沒有打開Access的方式是我正在尋找。我按照要求編輯了我的帖子。 – user33484

回答

2

我想我明白你在問什麼,但糾正我,如果我誤解。

您可以將此代碼插入Excel工作簿 - 在Microsoft Office 14.0 Access database engine Object Library(在工具|參考下)中添加所需的參考,並更改變量以匹配您的參數。

您還應該添加錯誤檢查

Option Explicit 

Public Sub SaveAccessTableToXL() 

    ' Under References, Add This 
    ' Microsoft Office 14.0 Access database engine Object Library 

    Dim db    As DAO.Database 
    Dim rs    As DAO.Recordset 

    Dim wb    As Workbook 
    Dim ws    As Worksheet 
    Dim rge    As Range 

    Dim strDatabase   As String 
    Dim strTable   As String 
    Dim strWorksheetPath As String 

    ' These are variables you need to set before running 
    strDatabase = "c:\databases\heatlink\linktest.accdb" 
    strWorksheetPath = "c:\databases\heatlink\" & "test.xlsx" 
    strTable = "tbl_areas" 

    ' Create New Workbook 
    Set wb = Workbooks.Add() 
    Set ws = wb.Sheets("Sheet1") 
    Set rge = ws.Range("A1") 

    ' Get Table Data from Database 
    Set db = DBEngine.OpenDatabase(strDatabase) 
    Set rs = db.OpenRecordset(strTable, dbOpenDynaset, dbReadOnly) 

    ' Copy Recordset into Worksheet 
    rge.CopyFromRecordset rs 
    rs.Close 

    ' Save Workbook 
    wb.SaveAs strWorksheetPath 
    wb.Close 

    MsgBox "Workbook Created: " & strWorksheetPath 
    Set wb = Nothing 
    Set ws = Nothing 
    Set rge = Nothing 

    Set rs = Nothing 
    Set db = Nothing 
End Sub