Vba 在Excel中从Access运行宏而不打开Access

Vba 在Excel中从Access运行宏而不打开Access,vba,excel,ms-access,Vba,Excel,Ms Access,我有一个excel程序,可以将数据写入Access数据库。在这个数据库中,我有一个宏,当它运行时,会将数据复制到另一个excel文件中。我想编辑原始excel程序,以便在将数据写入Access数据库后,它将自动运行宏。现在,我将其设置为将数据写入数据库,然后打开数据库,运行宏,然后关闭数据库-这似乎有点效率低下。以下是access数据库中的宏: Sub copy() Dim strTable As String Dim strWorksheetPath As String strWor

我有一个excel程序,可以将数据写入Access数据库。在这个数据库中,我有一个宏,当它运行时,会将数据复制到另一个excel文件中。我想编辑原始excel程序,以便在将数据写入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
程序中的相关代码只是打开数据库,调用宏并关闭它。如果有办法解决这个问题,根本不用打开数据库,那就太好了。谢谢


i、 e.我只是想说清楚,我正在寻找一种在excel中模拟上述代码的方法,这样我就根本不需要打开access数据库,也就是说,不使用access VBA就可以将数据从access传输到excel工作簿。

我想我理解你的要求,但如果我误解了,请纠正我

您可以将此代码插入Excel工作簿-将所需的引用添加到Microsoft Office 14.0 Access数据库引擎对象库中(在“工具”引用下),并更改变量以匹配您的参数

您还应该添加错误检查

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

我想我理解你的要求,但如果我误解了,请纠正我

您可以将此代码插入Excel工作簿-将所需的引用添加到Microsoft Office 14.0 Access数据库引擎对象库中(在“工具”引用下),并更改变量以匹配您的参数

您还应该添加错误检查

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

除非数据库在Access会话中打开,否则无法运行Access数据库中包含的代码。是否有任何方法可以在不打开Access的情况下从Access复制代码?也就是说,使用Excel VBA代码来模拟上述代码?不,连接是可以的,但我正在寻找一种不打开Access的方法。我已经按要求编辑了我的帖子。你能编辑你的问题和描述吗?听起来您需要一种从Access数据库提取数据的方法,而无需打开数据库并从Access运行宏。注意:在google上搜索“excel vba adodb.connection access数据库”并查看出现了什么情况,您应该能够使用adodb读取数据库而无需打开access。或者,在另一个excel文件中,您可以创建到现有数据库表的连接,请参阅。这将避免对Access宏的需要,而且您也很可能不需要将该宏“转换”为Excel VBA。除非在Access会话中打开数据库,否则您无法运行Access数据库中包含的代码。是否有任何方法可以在不打开Access的情况下从Access复制代码?也就是说,使用Excel VBA代码来模拟上述代码?不,连接是可以的,但我正在寻找一种不打开Access的方法。我已经按要求编辑了我的帖子。你能编辑你的问题和描述吗?听起来您需要一种从Access数据库提取数据的方法,而无需打开数据库并从Access运行宏。注意:在google上搜索“excel vba adodb.connection access数据库”并查看出现了什么情况,您应该能够使用adodb读取数据库而无需打开access。或者,在另一个excel文件中,您可以创建到现有数据库表的连接,请参阅。这样可以避免使用Access宏,而且您也不需要将该宏“转换”为Excel VBA。