从Excel列表框中删除项目

时间:2018-11-30 08:50:35

标签: excel vba listbox

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

这是我的代码的摘录:

 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触发。

2 个答案:

答案 0 :(得分:1)

如果使用msisdn填充列表框,则无法从列表中删除列表项。

因此,您需要使用.RowSource来填写列表。遍历您的范围,然后根据条件将每个项目添加到ListBox中。另请参见Adding items in a Listbox with multiple columns

答案 1 :(得分:0)

有关其他信息,并提供了与降低填充速度有关的明确解决方案:我使用一次读取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 '>>>

希望它也会有所帮助。