- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
历史上,Excel 中的外部数据查询用 QueryTable
s 表示。
ListObjects
出现在某个时候,但它们还不兼容 QueryTable
并且不能包含它们。
在 Office 2007 中,它们不仅兼容,而且成为默认设置。从那时起,创建一个外部查询就意味着创建一个 ListObject
,而 QueryTable
被缩减为它的内部组件。
“独立”QueryTables,没有包装在 ListObject 中,不能再用接口(interface)创建,但可以用代码创建,并且在新旧文件格式中都得到完美支持。
然后 Excel 2016 出现并引入了一个错误,在“独立”QueryTable 的情况下,在某些情况下会永久损坏工作簿。从错误中拯救 QueryTables 的唯一方法是将它们包装在 ListObject 中。
所以我有 10k+ 遗留 Excel 文档,其中现有的 QueryTable
需要用 ListObject
包装。重要的是,大多数查询表的右侧都有公式,即 filled down automatically。
使用 Excel 界面,将查询包装在列表中非常简单(在查询结果中激活一个单元格,Insert - Table - Ok) 并像人们期望的那样工作,留下一个功能齐全的列表,从查询中获取其数据。
将此操作记录为宏会产生:
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$5:$D$9"), , xlYes).Name = _
"Table_Query_from_MS_Access"
然而,执行这段代码而不做任何修改会导致 Frankenstein 查询表:它在外面看起来像一个列表对象,但它不起作用,无法刷新,无法编辑,显示旧式属性对话框,并且列表对象报告它是一个 xlSrcRange
而不是由接口(interface)创建的列表报告的 xlSrcQuery
。
就像电子一样,它会干扰自身(列表对象部分与查询表部分重叠并因此拒绝刷新,即使它们应该是同一个 - 记得右边有公式查询表,它们现在也必须是列表的一部分):
很明显,在转换表格时,该界面所做的工作比宏记录器捕获的要多得多。
我试过使用各种参数调用 ListObjects.Add
,提供一个 Range
作为源,一个 WorkbookConnection
作为源,一个 QueryTable
's Connection
作为源 - 只要它与现有的 QueryTable 重叠,它就不起作用。
我研究过取消链接现有的 QueryTable 并从头开始重新创建 ListObject,但这会导致表格周围的公式出现各种问题。
以编程方式用 ListObject
包装现有 QueryTable
的完整、正确的代码是什么,与接口(interface)的功能完全匹配?
目前在我看来,我将不得不通过直接操作我讨厌的 xslx 格式内的 XML 来做到这一点。
最佳答案
我无法以编程方式将 QueryTable 包装在 ListObject 中,但我可以为 Microsoft 的 Excel 2016/2019 QueryTable 错误提供缓解措施,因为避免它的影响似乎是您的真正目标。
Closed-source 3rd-party Excel add-in by Event 1 Software - 根据我的经验,这通常会解决问题,但我收到的报告仍然受到影响。您需要 2.11 或更高版本。您可以使用公式检查加载的插件版本:=XLQT3Version()
更改报告设计以降低 Microsoft 错误的风险(来源:报告设计方面的广泛工作,包括在未安装任何 Event 1 产品的系统上):
2.1 确保您的 QueryTable 的 header 不是 QueryTable 的一部分。您仍然可以在表格上方有一个手动标题。
2.2 在查询表的第一行上方插入一个空行(在查询表和手册页眉之间。
2.3 在新的空白行中,粘贴您的 QueryTable 所需的所有格式和公式。
2.4 将新行的高度设置为“3”。这将防止标题被完全或部分复制到 QueryTable 的主体中。相反,该错误将导致将所需的格式和公式复制到 QueryTable 中,而不是破坏 oueryTable 的那些部分。重要提示:您不得隐藏该行或将行高设置得太低。这样做会消除其保护作用。
2.5 刷新前禁用所有数据过滤器。您可以在刷新完成后重新应用它们。如果您需要自动执行此操作,请挂接 QueryTable 的刷新前/刷新后事件,或者使用删除它们的宏,开始刷新,然后恢复它们。
2.6 分组的行和小计在刷新之前也应该被删除,并恢复。刷新后。分组列是可以的。
3.1 打开受影响的文档,该文档在错误损坏后尚未保存。即,未损坏但会被 MS 错误损坏的文档。
3.2 不允许文档连接到数据源或刷新。取消任何登录请求。
3.3 等待至少 4 秒。
3.4 刷新 QueryTable(如果需要请登录)。
3.5 再次刷新QueryTable(有时是第三次。
关于excel - 如何以编程方式将 QueryTable 包装在 ListObject 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43596586/
我当前的代码: ConnectionName = "testCon" With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://t
我只打开了这一个工作簿(当时没有打开其他工作簿),并注意到列出了一堆数据连接。经过进一步调查,它表明这些连接没有“在此工作簿中使用”(再次,奇怪的是我只打开了这个工作簿,所以如果这里没有使用连接,它们
下午好, 我正在寻找一种处理 QueryTable 错误的方法。我查看了有关 google 和 stackoverflow 的其他问题,但它们似乎没有回答我要问的具体问题。 基本上,有没有办法确定处理
我正在从 Google 财经导入多个 csv 文件并将数据保存到一个工作表中。每当 URL 无效时,我希望它转到一个错误处理程序,它基本上说“找不到此信息”,然后继续返回以从网络上获取下一个 csv
我正在使用 VBA 开发 MS Excel 2013 工具,其中涉及 QueryTables 的使用。 访问 Excel 工作表中的现有查询表是一个不便之处。目前,我能找到的访问查询表的唯一方法是通过
我一直在放QueryTables结果 ActiveSheet ,但现在我想把它们放在另一张纸上。在下面的代码中,注释掉的行是我最初的,下面的“with”行是我的新尝试。 Dim QuerySheet
尝试导入 csv 文件时,我在 VBA (1004) 中遇到非常奇怪的错误。 这是我的代码: With ActiveSheet.QueryTables.Add(Connection:= _ "
Sub Macro1() Dim URL As String Dim Path As String Dim i As Integer For i = 2 To 50 If Range("Prices!
历史上,Excel 中的外部数据查询用 QueryTables 表示。 ListObjects 出现在某个时候,但它们还不兼容 QueryTable 并且不能包含它们。 在 Office 2007 中
有什么方法可以调整 QueryTables 行号的起始编号吗?我已设置 QueryTable.RowNumbers = True,但这从 0 开始计数。我想从 1 开始。 最佳答案 将 RowNumb
如标题所述:我发现单击功能区上的“全部刷新”按钮不会触发 QueryTable 的 BeforeRefresh 事件。为什么会这样?有没有办法改变这种行为? 奇怪的是,同一个QueryTable的Af
我编写了一个 visual basic 宏来将 csv 文件加载到我经常使用的 Excel 中。 不幸的是,如果 csv 文件包含带引号的换行符,则结果与直接用 excel 打开 csv 文件得到的结
我正在尝试自动执行此报告,并编写了 VBA 来执行各种任务,然后我在“RunAll”子程序中按顺序调用每个任务。我的工作簿中的数据透视表的选项卡中有来自 Access 查询的数据。 我发现当我运行这个
我正在使用 VBA 开发 Excel (2010+) 应用程序,但遇到了查询完成执行后不会调用 AfterRefresh 事件函数的问题。 我还没有找到很多像样的资源或文档来了解如何在类模块中触发此事
我正在 Excel for Mac 2016 中运行 QueryTable,目标范围为“data_value”,电子表格中单元格 A1 的名称为“hs”,QueryTable 在提取数据后将名称“Ex
使用 VBA,我正在尝试创建一个 Excel 查询表以提供来自文本文件的数据子集。我想使用 Jet OLEDB 连接字符串作为查询表 Connection .为什么会失败? 这是程序。 Sub Ole
我无法导入 csv 文件。第一行工作正常,但其余的都是靠不住的。这是 csv 中第一行和第二行的示例: "Order # ","Purchased From (Store)","Purchased O
我正在尝试编写一个自定义标记,它将以特殊方式遍历 cfquery 对象。我找到了这个页面:http://www.zrinity.com/developers/mx/undocumentation/qu
我正在跟踪在另一个网站上找到的代码。这是我的代码的基础知识: Dim SQL As String Dim connString As String connString = "ODBC;DSN=DB0
编辑:发现新错误? 我可能刚刚发现为什么我的脚本不再工作了。最近有一个 Office 更新,似乎他们已经实现了 microsoft 查询,它摆脱了我根据需要安装和配置的 ODBC 管理器。现在实际的问
我是一名优秀的程序员,十分优秀!