Vba 在Excel中从Access运行宏而不打开Access
我有一个excel程序,可以将数据写入Access数据库。在这个数据库中,我有一个宏,当它运行时,会将数据复制到另一个excel文件中。我想编辑原始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
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。