【发布时间】:2017-07-11 14:17:51
【问题描述】:
不确定此修复是否可行,但值得一试。
我的 Access 数据库中有一个 VBA 模块,用于将一些查询结果导出到预先存在的 Excel 工作表中。我在 C: 驱动器中创建一个新工作表并用查询结果填充它没有问题。但我需要能够修改现有的 Excel 工作表。
该数据库将被同一公司的许多用户使用。他们将下载一个包含数据库的 zip 文件和一些 Excel 表格,其中包含引用这些表格的表格和图表。这些表将由 Access 的查询结果填充。
主要问题是,使用我当前的代码,我收到运行时错误 3011,其中 Access 找不到查询 tempQ1。这是我的代码:(对不起,如果它很乱)
Sub QueryExport()
Dim db As DAO.Database
Dim tempQ1 As DAO.QueryDef
Dim tempQ2 As DAO.QueryDef
Dim totalFindingsQuery As String
Dim breakdownFindingsQuery As String
Dim query1Name As String
Dim query2Name As String
query1Name = "tempQ1"
query2Name = "tempQ2"
Set db = CurrentDb
totalFindingsQuery = "<SQL QUERY>"
breakdownFindingsQuery = "<SQL QUERY>"
Set tempQ1 = db.CreateQueryDef(query1Name, totalFindingsQuery)
Set tempQ2 = db.CreateQueryDef(query2Name, breakdownFindingsQuery)
'filepath will change to variable to accomodate various users
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, queryName1, "C:\Documents\ <etc.>", True
DoCmd.DeleteObject acQuery, "tempQ1"
DoCmd.DeleteObject acQuery, "tempQ2"
End Sub
我查看了这个https://social.msdn.microsoft.com/Forums/office/en-US/8cac5693-a620-4511-8784-2659904d6481/transfertext-runtime-error-3011?forum=accessdev 并发现我认为我的问题是——查看我的 C: 驱动器的属性时,我只检查了“特殊权限”,我认为我没有写权限.由于公司政策,我无法更改此设置(我的用户也无法更改),因此我需要弄清楚如何在不需要写入权限的情况下修改本地驱动器上的 Excel 工作表。这甚至可能吗?
提前致谢
【问题讨论】:
-
请说明完整的错误信息。 -- AFAIK,您不能使用
DoCmd.TransferSpreadsheet acExport编辑现有文件,它总是会创建一个新文件。 -- 如果你不能写一个文件夹,你就不能在那里导出。但我不确定这是你的实际问题。 -
实际的错误文本是——“MS Access 数据库引擎找不到对象“tempQ1”。确保对象存在并且正确拼写它的名称和路径。如果是“tempQ1”不是本地对象,请检查您的网络连接或联系服务器管理员。”我应该使用什么命令来编辑现有文件?我想我可以写入该文件夹,因为在使用 TransferSpreadsheet cmd 创建新工作表之前我没有遇到问题
-
创建变量
wb是否有意义,它等于我要修改的工作表,然后执行类似wb.Range("A1").copyfromrecordset rs的操作,其中我将我想要的查询设置为等于rs,一个记录集? -
重新阅读你的代码,试着把
db.QueryDefs.Refresh放在db.CreateQueryDef和DoCmd.TransferSpreadsheet之间 -
我还是不太明白你的问题。您应该对 Access 数据库所在的文件夹具有写入权限,否则将无法打开它。没有写权限就不能修改文件,但是没有写权限也不能运行Access,所以你应该把它放在某个地方。
标签: excel ms-access vba ms-access-2016