如何加快VBA代码

我有一个VBA代码的Excel文件(不是我写的)这个代码的工作原理是用户在用户表单中input一个6位数的数字,然后VBA检查另一个工作表,如果这个6位数字出现在工作表上。 如果是这样,它会改变舞台,但是如果没有,它会将这个6位数字添加到工作表中

它曾经是完美的工作,但现在,因为excel文件的行数增加了近6000行,这段代码变得非常慢,最多需要20秒来更新工作表

有人可以帮助我加快这个代码,或build议另一种方法来实现它

代码如下

Private Sub cmdPSDUdate_Click() Dim x If (Me.PSDUDateRow = "") + (Me.PSDStageCB.ListIndex = -1) Then Exit Sub With Sheets("psdata stage cals").ListObjects("PSDataStageCals") x = Application.Match(Val(Me.PSDUDateRow), .ListColumns(1).DataBodyRange, 0) If IsNumeric(x) Then .ListRows(x).Range(2) = Me.PSDStageCB.Value Else .ListRows.Add.Range = Array(Val(Me.PSDUDateRow), Me.PSDStageCB) End If End With Me.PSDUDateRow.Value = "" Me.PSDStageCB.Value = "" Me.PSDUDateRow.SetFocus End Sub 

提前致谢

拉胡尔

你可以closuresscreenupdating,自动计算等

 Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.EnableEvents = False 'Place your macro code here Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.DisplayStatusBar = True Application.EnableEvents = True 

除了Storaxbuild议的调整之外,您的代码很慢,因为您将逐个单元格的数据带到Excel / VBA划分。

此外,你可以使用它的二进制版本从根本上加快你的MATCHfunction。 请阅读http://dailydoseofexcel.com/archives/2015/04/23/how-much-faster-is-the-double-vlookup-trick/ ,并尽量减less您在整个Excel / VBA可以通过在Excel工作表中完全查找(通过使用VBA在表单中写入公式并在那里执行)或者通过使用变体数组一次性地将所有数据带入VBA,执行逻辑然后一口气倒掉。 谷歌“在Excel和VBA之间传输数据的有效方式”或类似的东西。 还请查看Charles Williams关于这个问题的任何文章。

我没有看到你的代码有什么问题。 工作簿本身也许是罪魁祸首。 开放变得巨大而缓慢吗? 如果是,请尝试search“清理excel文件”。
我发现一些结果:
https://excelfilecleaner.codeplex.com/
https://support.microsoft.com/en-us/help/3070372/how-to-clean-up-an-excel-workbook-so-that-it-uses-less-memory

VBA是解释,因此它是缓慢的。

当你真的想提高速度的时候,我build议你用基于ActiveX或自动化(或者更现代的)技术的编译语言来replaceVBA。 (这意味着,不是启动Excel,而是在Excel文件中运行一个程序,您需要启动一个计算机程序,它将对您的Excel文件执行某些操作)