UserForm需要很长时间才能删除行

时间:2014-07-29 14:59:10

标签: excel-vba listbox userform rowdeleting vba

我一直在开发一个UserForm,它使用A列填充的列表框根据列表框选择删除特定行。但是,当我点击"应用"按钮需要花费很长时间才能处理并删除行。

Apply按钮的代码如下,UserForm中几乎没有其他代码。只是我。隐藏在取消按钮。

Private Sub CommandApply_Click()

Dim i As Long
Dim n As Long
Dim col As New Collection
Dim itm As Variant
Dim rng As Range

' First, collect the row numbers corresponding to the selected items
' We work from last to first
n = Me.ListBox1.ListCount
For i = n - 1 To 0 Step -1
    If Me.ListBox1.Selected(i) Then
    Else
        col.Add i + 1
    End If
Next i

' Then delete the rows
Set rng = Worksheets("Sheet1").Range("A1:A100")
For Each itm In col
    rng.Rows(itm).EntireRow.Delete
Next itm

 blnCancel = False
   Me.Hide
End Sub

1 个答案:

答案 0 :(得分:1)

我认为你最好将未选择的项目收集到循环中的Range中,然后删除它:

Private Sub CommandApply_Click()

Dim i As Long
Dim n As Long
Dim col As New Collection
Dim itm As Variant
Dim rng As Range

' First, collect the row numbers corresponding to the selected items
' We work from last to first
n = Me.ListBox1.ListCount
For i = n - 1 To 0 Step -1
    If Not Me.ListBox1.Selected(i) Then
        If rng Is Nothing then 
           Set rng = Worksheets("Sheet1").Range("A" & i + 1)
        Else
           Set rng = Union(rng, Worksheets("Sheet1").Range("A" & i + 1))
        End If
    End If
Next i

' Then delete the rows
If not rng Is Nothing then rng.Entirerow.delete
 blnCancel = False
   Me.Hide
End Sub