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