2016-08-03 64 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 
相关问题