以下是我的一些同事已用于清理Excel文档的宏。这是一个完整的混乱!信不信由你,这是清理版本(我删除了大量的活动窗口滚动,一遍又一遍地调整列和行宽)。即使在我清理完所有事件(并关闭事件)之后,此代码仍然运行缓慢(10-15秒)并在整个页面上滚动。关于我如何改进它以更快地运行它的任何想法?
<input type="text" class="number" id="annual-income" name="annual_income">
<input type="text" class="number" id="commission" name="commission">
<input type="text" class="number" id="bonus" name="bonus">
<input id="income-button" type="button" value="Next">
答案 0 :(得分:1)
嗯,你关闭了事件......在宏代码执行任何操作之前,这个块对我来说是相当标准的:
Dim PrevCalc As XlCalculation
With Application
PrevCalc = .Calculation
.Calculation = xlCalculationManual
.Cursor = xlWait
.Calculate
.EnableEvents = False
.ScreenUpdating = False
End With
然后我&#34;撤消&#34;当宏完成时,或者出现错误时:
With Application
.Cursor = xlDefault
.Calculate
.Calculation = PrevCalc
'.ScreenUpdating = True 'Not Needed...
.EnableEvents = True
End With
顺便说一下,你调用的每个修改单元格的操作在技术上都是一个COM调用 - 所以你想要最小化它们。宏记录不够智能,无法知道修改单元格时你只做了一件事。
例如,在这里你真的只想让文本居中:
Range("A1").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlTop
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
将其更改为:
Range("A1").HorizontalAlignment = xlCenter