如何解决访问 VBA TransferSpreadsheet 错误 3251 操作不受支持
我请求你们的帮助,因为我在这里面临一个非常严重的问题。 我有一个简单的代码可以将 ms access (2016\2013) 查询结果导出到多年来一直运行良好的 Excel 电子表格中。
这是代码(没有发布我在上面的所有变量定义):
strsql = "select[query].* FROM [query] "
Set qdf = dbs.createqueryDef("MKTShare",strsql)
DoCmd.TransferSpreadsheet acExport,acSpreadsheetTypeExcel12Xml,"MKTShare","\\path\file.xlsx",_
True,""
DoCmd.DeleteObject acQuery,"MKTShare"
我尝试了两台不同的机器,一台运行 WIN10,一台运行 WIN7。结果一样。真正奇怪的是,这个问题主要出现在交叉表查询中。 “标准”选择查询没有问题。如果我将 xtabquery 转换为表,然后导出该表,没问题,但这是一个非常低效的解决方案,因为我有很多查询,其中包含循环运行的非常大的数据集。
如果我从 whithin 访问中运行查询,它会显示非常好的结果。问题在于转移电子表格方法。
我不知道为什么它多年来一直像沙姆一样工作,现在它不再起作用了。这一切都发生在昨天我获得了一些 Windows 更新之后。
我尝试使用 Output to 解决方法,但它不适用于预填充的 excel 模板,因为它搞砸了要导出到的整个文件。
提前致谢...
解决方法
我昨天刚遇到这个问题。昨天安装的 Windows 更新网页中有一个线索。 Jet/ACE 似乎添加了一个新的与安全相关的注册表项,以防止连接到远程源。不知道为什么 TransferSpreadsheet 导出中的交叉表查询会受到影响(必须在传输电子表格工作的幕后),但我可以在卸载此更新的情况下成功运行我的命令。
这是更新的链接。它是在办公室安全更新 (KB4493206) 中分发的。
,更新:这是 2021 年 5 月的 Office MSI 版本安全更新中引入的错误。微软知道它并正在修复错误。在 MS Answers thread 中引用 MVP Tom van Stiphout 的回答:
我收到了 MSFT 的回复。这是 A2013 和 A2016 MSI 的问题,可能会在 7 月的更新中修复。
我们有同样的问题。我进行了更多调试并设法创建了一个最小的可重现示例。显然,问题只会发生
- 在安装了 KB4493206 的 Access 2013 中(可能在 Access 2016 MSI 中也安装了相应的 KB,但我无法验证,因为我只有 Access 2016 的 C2R 版本),
- 当使用
DoCmd.TransferSpreadsheet
和 导出交叉表查询时
- 查询引用了 Access 用户界面控件。
以下是完整的重现说明:
-
创建一个新的 Access 数据库。
-
创建一个包含字段
Table1
(长整型)和ID
(文本)以及以下记录的新表MyText
:ID: 1,MyText: A ID: 2,MyText: B
-
创建一个带有文本框
Form1
的新空表单Text0
并保存。 -
打开表单并在文本框中输入
1
。按“Tab”键“保存”值并让表单保持打开状态。 -
使用以下 SQL 创建一个新的交叉表查询
CrosstabQuery1
:PARAMETERS [Forms]![Form1]![Text0] Long; TRANSFORM First(Table1.MyText) AS FirstValueOfMyText SELECT Table1.ID FROM Table1 WHERE ((([Forms]![Form1]![Text0])=1)) GROUP BY Table1.ID PIVOT Table1.ID;
(是的,这种转换毫无意义,在查询中引用表单控件是不好的做法,但这只是一个最小的重现示例。)
-
执行交叉表查询以确认其有效。保存并关闭它。 (不要在设计视图中打开它,否则您必须修复一些不影响 SQL 的仅限设计时的事情,然后才能保存它。)
-
在 VBA 代码编辑器的即时窗口中执行:
DoCmd.TransferSpreadsheet acExport,acSpreadsheetTypeExcel12Xml,"CrosstabQuery1","C:\temp\repro.xlsx"
预期结果:交叉表查询的结果导出到 Excel。
实际结果(在安装了 KB4493206 的 Access 2013 上):错误“3251 - 此对象类型不支持操作”
我在 Microsoft 论坛上也有 reported this bug。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。