【问题标题】:Running a macro from Access in Excel without opening Access在 Excel 中从 Access 运行宏而不打开 Access
【发布时间】:2025-12-20 05:50:11
【问题描述】:

我有一个将数据写入 Access 数据库的 excel 程序。在这个数据库中,我有一个宏,它在运行时会将数据复制到另一个 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

程序中的相关代码只是打开数据库,调用宏并关闭它。如果有办法解决这个问题,根本不需要打开数据库,那就太好了。谢谢。

即为了清楚起见,我正在寻找一种在 excel 中模仿上述代码的方法,这样我就不需要打开 access 数据库,即以某种方式将数据从 access 传输到 excel 工作簿,而不使用访问 VBA。

【问题讨论】:

  • 除非数据库在 Access 会话中打开,否则您无法运行 Access 数据库中包含的代码。
  • 有什么方法可以在不打开访问权限的情况下从访问权限中复制代码? IE。用Excel-VBA代码来模仿上面的代码?
  • 不,连接很好 - 但我正在寻找一种无需打开 Access 的方法。我已按要求编辑了我的帖子。
  • 你能编辑你的问题和描述吗?听起来您想要一种从 Access 数据库中提取数据的方法, 打开数据库并从 Access 运行宏。在那一点上:google for "excel vba adodb.connection access database" 看看结果如何,您应该能够使用 ADODB 在不打开访问权限的情况下读取数据库。
  • 或者,在另一个 Excel 文件中,您可以创建与现有数据库表的连接,请参阅here。这将避免对 Access 宏的需要,而且您很可能也不需要将该宏“转换”为 Excel VBA。

标签: vba excel ms-access


【解决方案1】:

我想我明白你在问什么,但如果我误解了,请纠正我。

您可以将此代码插入 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

【讨论】: