Excel运行速度很慢(使用VBA)

时间:2014-06-27 09:09:36

标签: excel vba

我有一个带有几个下拉列表的用户表单,这些列表通过VBA宏填充。这在开始时,在打开工作簿时就会发生。

加载完成后,工作簿变得非常慢。即使没有任何正在运行的宏,即使从一个单元格滚动到另一个单元格也会导致非常明显的延迟。

在打开工作簿时,会调用Load()函数,该函数基本上会预先填充用户表单。

userform具有~25个下拉列表,这些列表从单独的工作表(“Menu”)填充,该工作表将每个下拉列表的值存储在单独的列中。 “菜单”表通过Load()函数填充,该函数调用两个MenuQuery()例程之一。

其中一个从dbf文件中的某些列中获取不同的值,另一个列出了基于相关列表的选项。

Load()子例程中的片段:

Sub Load()

Application.ScreenUpdating = True


Dim MySht, Datasht As Worksheet



Set MySht = Sheets("Dashboard")
Set Datasht = Sheets("Menu")


MySht.Visible = xlSheetVisible
MySht.Activate

Datasht.Visible = xlSheetVisible
Datasht.Activate


ActiveSheet.Range("A1:IV2000").Select
Selection.ClearContents


Range("A1").Select
Call MenuQuery("A", "Type", "hh", "CmbBox1")
Call MenuQuery1("B", "Flow", "flow", "CmbBox2")  

.
'25 similar calls
.

Datasht.Visible = xlSheetVeryHidden 
    .
.'Hide some sheets
.
Sheets("Triggers").Visible = xlVeryHidden
Sheets("Actions").Visible = xlVeryHidden


MySht.Visible = xlSheetVisible
MySht.Activate


End Sub

我尝试了什么:

  1. 尝试注释掉MenuQuery()函数并且问题仍然存在。所以我想这不是问题
  2. 在函数开头尝试使用Application.ScreenUpdating = False,无需更改
  3. 事实上,我只是尝试不调用Load()函数,但这似乎也没有帮助!

1 个答案:

答案 0 :(得分:0)

如果Excel VBA宏代码运行缓慢,则可能是因为Excel必须在每行代码重新计算。删除行是很多事情之一,可能变得非常缓慢。通过在代码运行之前将Excel切换为手动计算,可以非常轻松地克服这一问题。请注意,如果您的代码出现错误,并且没有错误陷阱,则工作簿将保留在手动计算中,并且任何正确设计的电子表格都不应与手动计算一起使用。  如果您有建议将Excel切换到手动计算以防止缓慢保存,关闭和数据输入......运行速度非常快! 这是一种乐队援助方法,而不是解决根本原因。 如果您在手动计算中运行任何Excel工作簿,那么读取非计算数据只是时间问题!