【问题标题】:Clear the contents of cells清除单元格内容
【发布时间】:2018-07-08 00:28:41
【问题描述】:
有一个程序可以清除某些单元格区域的内容。它工作正常,但速度很慢(7 分钟)。
如何加速这个程序?
Sub óäàëèòü()
Dim book1 As Workbook
Dim B As String
Dim v As Long
Dim e As Long
B = "14"
Set book1 = Workbooks.Open("E:\Super M\Ïðîåêò ñòàâêè\Ïîèñê ðåøåíèÿ\Óñîâ 7\Óñëîâèÿ äëÿ àíäåðäîãîâ\" + B + ".xlsm")
For v = 1 To 14
For e = 0 To 8
book1.Worksheets("Ëèñò" & v).Cells(34, 26 + (e * 21)).Resize(128, 5).ClearContents
Next e
Next v
book1.Save
book1.Close
End Sub
【问题讨论】:
标签:
excel
vba
for-loop
range
【解决方案1】:
提高性能的一种方法是禁用 Excel 计算和屏幕更新,如下所示,这样应用程序执行的计算量就会减少。
Sub óäàëèòü()
Dim book1 As Workbook
Dim B As String
Dim v As Long
Dim e As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
B = "14"
Set book1 = Workbooks.Open("E:\Super M\Ïðîåêò ñòàâêè\Ïîèñê ðåøåíèÿ\Óñîâ 7\Óñëîâèÿ äëÿ àíäåðäîãîâ\" + B + ".xlsm")
For v = 1 To 14
For e = 0 To 8
book1.Worksheets("Ëèñò" & v).Cells(34, 26 + (e * 21)).Resize(128, 5).ClearContents
Next e
Next v
book1.Save
book1.Close
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
【解决方案2】:
我看到你已经接受了一个答案。但是,我应该有兴趣知道下面编码的想法是否具有可比性。该代码选择了所有 14 张工作表,并在一次操作中删除了所有工作表中的范围,而不是 126。
Sub Something()
' 29 Jan 2018
Dim Book1 As Workbook
Dim WsNames(1 To 14) As Variant
Dim WsArr As Variant
Dim Rng As Range
Dim B As String
Dim v As Long
Dim e As Long
B = "14"
Set Book1 = Workbooks.Open("E:\Super M\?e??¨º¨° ?¨°¨¤a¨º¨¨\??¨¨?¨º e???¨ª¨¨?\¨®??a 7\¨®???a¨¨? ??? ¨¤¨ª??e????a\" + B + ".xlsm")
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
For v = 1 To 14 ' match loops to declaration
WsNames(v) = "Sheet" & v
Next v
For e = 0 To 8
B = Cells(34, 26 + (e * 21)).Resize(128, 5).Address
With Book1.Worksheets(WsNames(1))
If Rng Is Nothing Then
Set Rng = .Range(B)
Else
Set Rng = Application.Union(Rng, .Range(B))
End If
End With
Next e
Set WsArr = Worksheets(WsNames)
WsArr.Select
Rng.Select
Selection.ClearContents
With Application
.EnableEvents = True
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
With Book1
.Worksheets(WsNames(1)).Activate
.Save
.Close
End With
End Sub
【解决方案3】:
`Sub` óäàëèòü()
Dim book1 As Workbook
Dim B As String
Dim v As Long
Dim e As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
If Workbooks.Count Then
ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False
End If
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
B = "14"
Set book1 = Workbooks.Open("E:\Super M\Ïðîåêò ñòàâêè\Ïîèñê ðåøåíèÿ\Óñîâ
7\Óñëîâèÿ äëÿ àíäåðäîãîâ\" + B + ".xlsm")
For v = 1 To 14
For e = 0 To 8
book1.Worksheets("Ëèñò" & v).Cells(34, 26 + (e * 21)).Resize(128,5).
ClearContents
Next e
Next v
book1.Save
book1.Close
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
If Workbooks.Count Then
ActiveWorkbook.ActiveSheet.DisplayPageBreaks = True
End If
Application.DisplayStatusBar = True
Application.DisplayAlerts = True
End Sub
我添加了一些提示,并且还链接到非常有用的文章(对我而言)
在 google 中优化 Lookups 将是第一个链接