从Excel列表框中删除项目



在某些条件下,我需要使用Range中的数据从Listbox中删除项。我不想删除列表框所基于的工作表中的数据。

以下是我的代码摘录:

Me.LstWSource.RowSource = ""
If Len(rRange.Offset(1, 0).Formula) > 0 Then
Set rRange = ThisWorkbook.Sheets(G_sNameReferenceS).Range(rRange.Offset(1, 0), rRange.End(xlDown))
With Me.LstWSource
.ColumnWidths = "28pt"
.RowSource = rRange.Address
.ListIndex = -1
End With '>>>
End If
'>>>>>>>>>>>>>>>>>>>>>>>>
sRet = fG_SortingBasicS("lstYear", "DESC")
'>>>>>>>>>>>>>>>>>>>>>>>>
For i = Me.LstWSource.ListCount - 1 To 0 Step -1
'>> current string condition to delete Item <<
If Me.LstWSource.List(i) > CStr(Year(G_datJourTraitee)) Then
Me.LstWSource.RemoveItem (i)
End If
Next i

该错误由RemoveItem触发。

如果使用.RowSource填充ListBox,则无法从列表中删除列表项。

因此,您需要使用LstWSource.AddItem来填写您的列表。循环浏览您的范围,并根据您的条件将每个项目添加到ListBox中。另请参阅在具有多列的列表框中添加项目。

要了解更多信息,并提出与减缓填充有关的明确解决方案:我使用了一次Range单元格的读取来填充动态数组。然后,我使用这个数组来排除或包括另一个第二数组中的行。

这些是需要考虑的线路:

J = 1
For i = LBound(G_varListYears) To UBound(G_varListYears)
If G_varListYears(i) <= CStr(Year(G_datJourTraitee)) Then
'>>>
ReDim Preserve vListTMP(J)
vListTMP(J) = G_varListYears(i)
J = J + 1
'>>
ElseIf (Me.chkNextYear = True) And ((Month(G_datJourTraitee) = 11 Or Month(G_datJourTraitee) = 12) And (G_varListYears(i) = CStr(Year(G_datJourTraitee) + 1))) Then
'>>>
ReDim Preserve vListTMP(J)
vListTMP(J) = G_varListYears(i)
J = J + 1
'>>
Else
'>>
End If
Next i
With Me.LstWSource
.ColumnWidths = "28pt"
.List = vListTMP()
.ListIndex = -1
End With '>>>

希望它也能有所帮助。

最新更新