优化/精简Excel VBA删除空列
问题描述:
我一直在使用下面的代码从jonhaus.hubpages.com删除我有空列。优化/精简Excel VBA删除空列
'Delete empty columns
Dim c As Integer
c = ActiveSheet.Cells.SpecialCells(xlLastCell).Column
Do Until c = 0
If WorksheetFunction.CountA(Columns(c)) = 0 Then
Columns(c).Delete
End If
c = c - 1
Loop
然而,正如我已经写了VBA,它得到有点臃肿和缓慢......我试图优化,并通过消除环路,复制/粘贴简化我的代码等
你们是否对代码做了相同的建议(删除整个静态列)而不需要循环“Do Until/If/End If/Loop”语句?
参考文献: http://jonhaus.hubpages.com/hub/Excel-VBA-Delete-Blank-Blank-Columns http://www.ozgrid.com/VBA/SpeedingUpVBACode.htm
答
扩大对我的评论上面,创建循环内的范围,但删除它只有一次。
Dim c As Integer
Dim rngDelete As Range
c = ActiveSheet.Cells.SpecialCells(xlLastCell).Column
Do Until c = 0
If WorksheetFunction.CountA(Columns(c)) = 0 Then
'Combine each empty column:
If Not rngDelete Is Nothing Then
Set rngDelete = Application.Union(rngDelete, Columns(c))
Else
Set rngDelete = Columns(c)
End If
End If
c = c - 1
Loop
'Deletes ALL empty columns at once:
rngDelete.EntireColumn.Delete
其他明显的改进是禁用Application.ScreenUpdating
并在运行时设置Application.Calculation = xlManual
。 (记住要在子程序结束时恢复它们的正常功能
只是一个想法,而不是在循环内部执行迭代的'.Delete',你可以创建一列要删除的列,然后将它们全部删除'.Delete'声明,在循环之外,其他明显的改进是在*运行期间禁用'Application.ScreenUpdating'并设置'Application.Calculation = xlManual' *(记得在子例程结束时恢复它们的正常功能。 – 2014-09-22 17:46:58