MS Acess按钮可将查询结果导出到Excel

时间:2018-06-26 13:40:18

标签: sql vba access-vba

我在向MS Access Form添加一个按钮时遇到问题,该按钮将执行查询并在新窗口(采用任何格式)中打开结果。

两个主要问题是:

  1. 数据库是外部数据库,受密码保护
  2. 用户无法看到实际的SQL字符串,因为他们随后将获得 外部数据库的密码。

不幸的是,下面的代码不起作用。

Sub bQuery_Click()

    Dim StrSQL As String
    Dim username As String

    username = Environ("USERNAME")

    StrSQL = "SELECT EntryText, NameID FROM [I:\SharedDrive\Master DB.accdb;PWD=pwd;].Database WHERE NameID='" & username & "';"
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, StrSQL, "I:\SharedDrive\file1.xlsx"

End Sub

2 个答案:

答案 0 :(得分:1)

您能否/愿意将要查询的表添加为链接表?这样,您可以在前端数据库中创建查询,然后仅导出该查询,而不必在VBA中对SQL进行硬编码。

将该表添加为链接表将在TableDef对象上公开该密码,但是似乎您已经在VBA中公开了该密码。如果还没有的话,可以锁定数据库以使用户难以打开VBA IDE(有许多策略可以做到这一点,例如创建ACCDE文件,用密码保护模块文件,并锁定功能区和键盘快捷键。

答案 1 :(得分:0)

只需在Access中创建查询,然后单击每个按钮即可更改SQL:

SQL

SELECT EntryText, NameID 
FROM [I:\SharedDrive\Master DB.accdb;PWD=pwd;].Database 
WHERE NameID='xLokos';

VBA

Sub bQuery_Click()    
    Dim qdef As QueryDef

    username = Environ("USERNAME")    
    StrSQL = "SELECT EntryText, NameID" _
               & " FROM [I:\SharedDrive\Master DB.accdb;PWD=pwd;].Database" _
               & " WHERE NameID='" & username & "';"

    Set qdef = CurrentDb.QueryDefs("mySavedQuery")
    qdef.SQL = strSQL
    Set qdef = Nothing         'SAVES QUERY

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, _
                              "mySavedQuery", _
                              "I:\SharedDrive\file1.xlsx"    
End Sub