Excel VBA查询有没有一种方法可以通过刷新来提高Excel VBA的速度.所有这些都需要大量的查询



我有一个选项卡和几个透视表。一切都很好,但现在因为我在选项卡中添加了vlookup和一些公式,所以文件速度很慢。请注意,我有一个到ODBC和SQL的连接,可以提取大约30000行和32列的数据。

有什么方法可以提高我的表现吗?

我尝试过:取消选中后台更新添加了等待查询

它仍然很慢。。。完成并打开大约需要15分钟!如有任何帮助,我们将不胜感激!

谢谢,

Private Sub Workbook_Open()
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
ActiveSheet.DisplayPageBreaks = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
DoEvents
ActiveWorkbook.RefreshAll
Application.CalculateUntilAsyncQueriesDone
If Not Application.CalculationState = xlDone Then
DoEvents
End If
DoEvents
Range("A3:P3").Select
Sheets("FRQ-4").Select
Range("A6").Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("STATUT")
.PivotItems("INACTIF").Visible = False
.PivotItems("(blank)").Visible = False
End With
ActiveSheet.Range("$A$3:$P$385").AutoFilter Field:=14, Criteria1:="=1", _
Operator:=xlOr, Criteria2:="=BESOIN-ACHAT " & Chr(10) & "1=OUI 0=NON"
DoEvents
Range("A3:P3").Select
Sheets("FRQ-3").Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("STATUT")
.PivotItems("INACTIF").Visible = False
.PivotItems("(blank)").Visible = False
End With
ActiveSheet.Range("$A$3:$P$385").AutoFilter Field:=14, Criteria1:="=1", _
Operator:=xlOr, Criteria2:="=BESOIN-ACHAT " & Chr(10) & "1=OUI 0=NON"
Range("A6").Select

DoEvents
Range("A3:P3").Select
Sheets("FRQ-2").Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("STATUT")
.PivotItems("INACTIF").Visible = False
.PivotItems("(blank)").Visible = False
End With
ActiveSheet.Range("$A$3:$P$385").AutoFilter Field:=14, Criteria1:="=1", _
Operator:=xlOr, Criteria2:="=BESOIN-ACHAT " & Chr(10) & "1=OUI 0=NON"
Range("A6").Select

DoEvents
Range("A3:P3").Select
Sheets("FRQ-1").Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("STATUT")
.PivotItems("INACTIF").Visible = False
.PivotItems("(blank)").Visible = False
End With
ActiveSheet.Range("$A$3:$P$385").AutoFilter Field:=14, Criteria1:="=1", _
Operator:=xlOr, Criteria2:="=BESOIN-ACHAT " & Chr(10) & "1=OUI 0=NON"
Range("A6").Select

Sheets("FRQ-4").Select
With ActiveSheet.Columns("E:S")
.HorizontalAlignment = xlCenter
End With
With ActiveSheet.Columns("A:D")
.HorizontalAlignment = xlLeft
End With
Sheets("FRQ-3").Select
With ActiveSheet.Columns("E:S")
.HorizontalAlignment = xlCenter
End With
With ActiveSheet.Columns("A:D")
.HorizontalAlignment = xlLeft
End With

Sheets("FRQ-2").Select
With ActiveSheet.Columns("E:S")
.HorizontalAlignment = xlCenter
End With
With ActiveSheet.Columns("A:D")
.HorizontalAlignment = xlLeft
End With

Sheets("FRQ-1").Select
With ActiveSheet.Columns("E:S")
.HorizontalAlignment = xlCenter
End With
With ActiveSheet.Columns("A:D")
.HorizontalAlignment = xlLeft
End With
MsgBox "Ready"
End Sub

提高性能的方法

(如果没有工作簿,很难找出真正的罪魁祸首(。。。

似乎您已经涵盖了VB的大部分通用部分:

Application.screenupdating=falss
Application.calculationmode = xlManualClaculation

等等。,因此,转移到什么可能是罪魁祸首*:

*(尽管您意识到"Doevents"会减慢宏的速度


1(VLOOKUP

1.1(使用索引匹配

我个人讨厌VLOOKUP,从Excel 2000之类的东西开始就没有使用过,因为当时我不知道有什么比这更好的了。虽然XLOOKUP看起来很有前景,但通常情况下,VLOOKUP对索引/匹配的限制太大,因为它只能搜索到查找列的右侧(排除特殊情况(。

你猜怎么着?它也比索引/匹配慢得多!

参见此处(Kyd,n.a,浏览量超过4万次,可下载excel工作簿/示例(

">对于未排序的数据,VLOOKUP和INDEX-MATCH的计算时间大致相同。。。通过排序数据和近似匹配,INDEX-match比VLOOKUP快约30%。通过排序数据和快速查找精确匹配的技术,INDEX-match比VLOOKUP快约13%";

关于偏移/匹配与索引匹配(性能方面(的优点的讨论可以在这里找到(Ed,2003(

1.2(限制范围

无论您使用VLOOKUP/INDEX-MATCH/OTHER,请尝试:

  • 限制适用的范围-例如,如果你已经在做了,不要突出显示整列,或者使用动态范围(Cheusheva,2021(

2.1(其他

  • 关于你的VB-你是否尝试过执行程序的不同部分(第一、第二、第三个关键区域(?即发现哪个耗时最长
  • 什么时候开始"陷入困境"?在导入阶段,还是在进行计算时?或创建/更新枢轴
  • excel文件有多大?如果超过40MB,这可能是一个问题。另存为filetype.xlsb如果你还没有,你将拥有相同的VB访问权限,除非你使用SQL输出(你可能是(,否则你可以将文件大小减少40-50%
  • 如果你确实有SQL连接,最近你的网络连接有什么奇怪/有趣的地方吗(如果适用的话?(你能把数据导入一个完全独立的工作簿中,然后使用数据导入来处理本地文件中的数据吗(我知道你可以,我的意思是,试试这个,看看它是否能缩短时间(
  • 将计算输入到枢轴,然后再"重新枢轴",可能会导致实质性延迟

如果要从SQL server提取数据,请确保查询是从VIEW中选择的。。永远不要从静态TABLE中进行选择。

相关内容

  • 没有找到相关文章

最新更新