MS Access VBA修改Excel工作表而不写入驱动器

MS Access VBA修改Excel工作表而不写入驱动器,excel,ms-access,vba,ms-access-2016,Excel,Ms Access,Vba,Ms Access 2016,不确定这是否可行,但值得一试 我的Access数据库中有一个VBA模块,可以将一些查询结果导出到预先存在的Excel工作表中。在我的C:drive中创建一个新的工作表并用查询结果填充它并没有问题。但我需要能够修改现有的Excel工作表 该数据库将由同一公司的多个用户使用。他们将下载一个带有数据库的zip和一些Excel表格,其中包含引用这些表格的表格和图表。这些表将由Access的查询结果填充 主要问题是,在我当前的代码中,我遇到了运行时错误3011,Access无法找到查询tempQ1。这是我

不确定这是否可行,但值得一试

我的Access数据库中有一个VBA模块,可以将一些查询结果导出到预先存在的Excel工作表中。在我的C:drive中创建一个新的工作表并用查询结果填充它并没有问题。但我需要能够修改现有的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
我查看了这个,发现了我认为我的问题所在——当查看我的C:drive的属性时,我只检查了特殊权限,我认为我没有写权限。由于公司政策的原因,我无法对此进行更改,而且我的任何用户都无法更改,因此我需要弄清楚如何在不需要写入权限的情况下修改本地驱动器上的Excel工作表。这可能吗


提前感谢

好吧,我发现了你的错误,很简单:

在DoCmd.TransferSpreadsheet acExport、acSpreadsheetTypeExcel12Xml、queryName1、C:\Documents\、True中,将queryName1替换为QueryName


为便于将来参考,请在任何模块中包含Option Explicit以避免变量拼写错误

请说明完整的错误消息。-好的,您不能使用DoCmd.TransferSpreadsheet acExport编辑现有文件,它总是创建一个新文件。-如果无法写入文件夹,则无法在那里导出。但我不确定这是您的实际问题。实际的错误文本是-MS Access数据库引擎找不到对象tempQ1。确保对象存在,并且正确拼写其名称和路径。如果“tempQ1”不是本地对象,请检查网络连接或与服务器管理员联系。我应该使用什么命令编辑现有文件?我想我可以写入文件夹,因为我以前使用TransferSpreadsheet cmd创建新工作表时没有问题。创建变量wb等于我要修改的工作表,然后执行类似于wb.RangeA1.copyfromrecordset rs的操作,在该操作中,我将我想要的查询设置为rs,记录集?重新读取代码,尝试将db.querydfs.Refresh放在db.createquerydf和DoCmd.transferSpreadsheet之间。我仍然不完全理解您的问题。您应该对Access数据库所在的文件夹具有写入权限,否则将无法打开它。你不能在没有写权限的情况下修改一个文件,但是你也不能在没有写权限的情况下运行Access,因此你应该在某个地方拥有它。该死,这么容易看到,但很容易错过。。。我的选项明确的标准简介:-放在每个模块的顶部。它强制执行变量声明,并在编译时报告未声明或拼写错误的变量/常量。要在新模块中自动执行此操作,请在VBA编辑器中设置该选项。这是VBA开发的必备工具。感谢您的回复。。。实际上,我的实际代码中有正确的名称,我编辑了我发布的代码,删除了公司的IP内容,然后出错了。最后,我找到了一个解决方案,删除了TransferSpreadsheet命令,打开Excel,打开工作簿,打开必要的工作表,将每个查询设置为记录集,然后设置工作簿。Range.copyfromrecordsetWell,您的代码是有效的,可以工作,只要以filename.xlsx结尾