2015-10-20 50 views
1

该子删除在工作表上以编程方式创建的所有命令按钮及其关联行。删除60个命令按钮和行需要大约20秒的时间。我已经通过了它,并没有发现任何问题。从工作表中删除命令按钮和行非常缓慢

Sub ResetForm_Click() 

    Dim Contr 
    Dim controlname As String 
    Dim WS As Worksheet 

    Set WS = ActiveSheet 

     For Each Contr In WS.OLEObjects 

     controlname = Mid(Contr.Name, 1, 2) 

      If controlname = "CB" Then 
       Contr.TopLeftCell.Rows.EntireRow.Delete 
       Contr.Delete 
      End If 

     Next 

End Sub 
+2

首先尝试启用关闭screenupdating,看看是否改善了事情。 –

回答

4

不用删除行一个接一个的尝试是这样的(未经测试):

Sub ResetForm_Click() 

    Dim Contr 
    Dim controlname As String 
    Dim WS As Worksheet, rDel As Range 

    Set WS = ActiveSheet 

     For Each Contr In WS.OLEObjects 

     controlname = Mid(Contr.Name, 1, 2) 

      If controlname = "CB" Then 
       If rDel Is Nothing then 
        Set rDel = Contr.TopLeftCell 
       Else 
        Set rDel = Application.Union(rDel, Contr.TopLeftCell) 
       End If 
       Contr.Delete 
      End If 

     Next 

     If Not rDel Is Nothing then rDel.EntireRow.Delete 

End Sub 
+0

如果他也关闭屏幕更新和计算,那会超快。 – BruceWayne

1

,而无需编辑您的宏太多,关闭屏幕更新和autocalculation,看看是否有帮助。

在宏的开始(我通常把它放在我的声明之后),加

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

那么,在年底(End Sub之前),再将其打开

Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic