4

在一个更大的 Excel 应用程序中,(25 张工作表、50 个命令按钮、5000 行代码、18 个用户表单……大小 12 MB)……我们从服务器加载表格作为 txt 文件,然后使用标准程序。通过宏,我们在下载后删除所有查询表和连接。

一切都完美而快速,但主表现在越来越慢。即使打开工作簿也需要越来越多的时间,而大小保持不变。

不知何故,我有一种感觉,从 txt_files 传输的数据的剩余部分没有被删除:

#
Dim ws As Worksheet   
Dim qt As QueryTable   
For Each ws In ThisWorkbook.Worksheets   
For Each qt In ws.QueryTables   
qt.Delete   
Next qt   
Next ws   

If ActiveWorkbook.Connections.Count > 0 Then   
For i = 1 To ActiveWorkbook.Connections.Count   
ActiveWorkbook.Connections.Item(1).Delete   
Next i 
EndIf
#

工作簿中没有公式。即使选择 main_sheet + clear 的所有单元格,减速仍然存在......我想在该命令之后所有单元格都是空的......

在其他 24 张表中没有 speed_problems(甚至过滤列表 850.000 x 33)

知道如何检查导致 main_sheet 中工作簿变慢的原因吗?是否有比删除查询表和连接更强大的“清理”命令?是否有任何方法可以记录 excel 在做什么,而它不返回命令?

4

2 回答 2

0

尝试这个:

ActiveSheet.UsedRange.EntireRow.Delete

还要检查公式/命名范围,因为每个 ListObject 表都添加了新的命名范围。

Sub DeleteAllNamedRanges()
Dim NR As Name
For Each NR In Application.ActiveWorkbook.Names
    NR.Delete
Next
End Sub
于 2017-12-14T09:20:43.320 回答
0

这可能根本不相关,抱歉,但我发现问题不是连接数,而是每个连接中的参数数。

我发现“罪魁祸首”是查询表本身留下的过时/过多的参数对象。我的一些查询有大约 15 个参数,而 SQL 只需要一个!

Excel 没有我所知道的接口,一旦针对QueryTable. 当您直接在 Excel 中手动调整 SQL 代码并使用“?”使用新参数或额外参数保存它时,可能会发生这种情况。字符,每个参数。当您最终确定一个参数时,所有其他参数仍然被抛在后面。我找不到清除/删除它们的方法。

如果你 ...

转到 Excel -> 文件打开你的工作簿 -> 停止所有宏(如果有) -> 单击数据 -> 查询和连接以打开所有查询等 -> 双击查询或连接并检查定义选项卡和单击参数...,您可能会看到与第一个参数执行相同操作的大量参数列表。

这会以指数方式减慢 Excel,因为对于 Excel 每次刷新工作表/表的 Query 调用,它都会再次运行该查询,并再次运行“n”次。

由于 Excel 没有适当的界面来管理参数,我不得不使用此代码将它们全部删除,并且每个查询只创建一个参数。

For Each Cn In ActiveSheet.QueryTables
        Cn.Parameters.Delete
Next Cn

我找不到只删除一个或几个参数的方法,例如Cn.Parameter(ndx).Delete. 没有这样的方法。

于 2019-03-14T01:02:06.260 回答