[英]Code for Deleting Multiple Rows Selected in ListBox (VBA)
目前,我正在一个项目中,我被困在为以下提到的活动编写代码的过程。
我用多选列表框和命令按钮创建了一个用户窗体
a)ListBox用2列填充表源中的项目。
Zone Region
North N1
North N2
North N3
North N4
South S1
South S2
South S3
South S4
East E1
East E2
b)命令按钮用于删除在列表框中选择的项目。
现在,一旦我单击Delete Command Button,选定的行应在原始表源中被删除。
问题
我面临的问题是,即使我在列表框中选择2行或更多行,也只会删除 最后选择的行 。
Private Sub Cmd_Del_Click()
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets("Sheet1")
Dim i As Long
For i = Me.LB_ZoneRegion.ListCount - 1 To 0 Step -1
If Me.LB_ZoneRegion.Selected(i) = True Then
sh.Range("A" & i + 2 & ":B" & i + 2).Select
Selection.Delete
End If
Next i
Call UserForm_Initialize
End Sub
Private Sub UserForm_Initialize()
On Error Resume Next
With Me.LB_ZoneRegion
.Clear
.ColumnCount = 2
.ColumnHeads = True
.ColumnWidths = "40;50"
.RowSource = "ZoneRegion"
.MultiSelect = fmMultiSelectMulti
End With
End Sub
单击下面的链接下载工作文件。 https://drive.google.com/open?id=1P5wiW6WVFAVQBgixPuA7gqyacR1aktvi
请在这方面帮助我。
使用Union
避免重复删除
使用Union
函数,您可以将要删除的所有行添加到范围对象(例如DelRng
),最后通过一条代码行DelRng.Delete
删除它们。
接近OP的示例代码
Private Sub Cmd_Del_Click()
Dim sh As Worksheet
Dim DelRng As Range
Set sh = ThisWorkbook.Worksheets("Sheet1")
Dim i As Long
For i = 0 to Me.LB_ZoneRegion.ListCount - 1 ' no more need to loop backwards
If Me.LB_ZoneRegion.Selected(i) = True Then
If DelRng Is Nothing Then
Set DelRng = sh.Range("A" & i + 2 & ":B" & i + 2)
Else
Set DelRng = Union(DelRng, sh.Range("A" & i + 2 & ":B" & i + 2))
End If
End If
Next i
Application.ScreenUpdating = False
If Not DelRng Is Nothing Then DelRng.Delete ' delete chosen rows (if any)
Application.ScreenUpdating = True
End Sub
注意
您还应提供以下情况:用户删除整个命名范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.