vba excel连接查询表删除

vba excel连接查询表删除,excel,connection,vba,Excel,Connection,Vba,在一个更大的Excel应用程序中,(25页,50个命令按钮,5000行代码,18个用户表单…大小为12MB)。。。我们从服务器加载表作为txt文件,并使用标准过程将这些txt_文件重新转换为excel数据。 通过宏,我们在下载后删除所有查询表和连接 一切都很完美,速度也很快,但是主工作表现在越来越慢了。 即使打开工作簿也需要越来越多的时间,而大小保持不变 不知怎的,我感觉到,txt_文件中的数据传输有一些剩余内容,这些内容不会被删除: Dim ws As Worksheet Dim qt

在一个更大的Excel应用程序中,(25页,50个命令按钮,5000行代码,18个用户表单…大小为12MB)。。。我们从服务器加载表作为txt文件,并使用标准过程将这些txt_文件重新转换为excel数据。 通过宏,我们在下载后删除所有查询表和连接

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

不知怎的,我感觉到,txt_文件中的数据传输有一些剩余内容,这些内容不会被删除:

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
# # 工作簿中没有公式。 即使选择主工作表的所有单元格并清除,速度也会持续减慢。。。我想在那个命令之后所有的单元格都是空的

在其他24张表中,没有速度问题(甚至过滤列表850.000 x 33)

知道如何在主工作表中检查是什么使工作簿变慢了吗? 是否有比删除查询表和连接更强大的“清理”命令? 当excel不返回命令时,是否有任何方法可以记录它正在做的事情?

尝试以下方法:

ActiveSheet.UsedRange.EntireRow.Delete
在公式/命名范围中也进行检查,因为每个ListObject表都添加了新的命名范围

Sub DeleteAllNamedRanges()
Dim NR As Name
For Each NR In Application.ActiveWorkbook.Names
    NR.Delete
Next
End Sub

抱歉,这可能根本没有关系,但我发现问题不在于连接的数量,而在于每个连接中的参数数量

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

据我所知,Excel没有一个接口,用于在根据
查询表创建参数后删除这些参数。当您直接在Excel中手动调整SQL代码,并使用每个参数的“?”字符将其与新参数或额外参数一起保存时,可能会发生这种情况。当您最终确定一个参数时,所有其他参数仍然落后。我找不到清除/删除它们的方法

如果你

转到Excel->文件打开工作簿->停止所有宏(如果有)-> 单击数据->查询和连接打开所有查询等 ->双击一个查询或连接,检查定义选项卡,然后单击参数…,您可能会看到一个庞大的参数列表,其中包含 与第一个参数相同

这会使Excel的速度呈指数级降低,因为Excel每次调用查询以刷新工作表/表时,都会一次又一次地运行该查询

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

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

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

我在某个地方读到,从Excel 2007开始,你必须处理每个ActiveSheet中的QueryTable。ListObjects如果你试图清除主工作表,你应该选择all,然后在键盘上按下(Control&-)这是Control键,同时按住数字键盘上的减号键,这应该删除所有的单元格,而不仅仅是清除内容,因此释放一些内存。。。