从Excel列表框中删除项目

从Excel列表框中删除项目,excel,vba,listbox,Excel,Vba,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 M

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

以下是我的代码摘录:

 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填充列表框,则无法从列表中删除列表项


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

,了解更多信息,并提出我关于减缓填充速度的明确解决方案:我使用读取一次范围单元格来填充动态数组。然后,我使用这个数组排除或包含另一个数组中的行

这些是需要考虑的方面:

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 '>>>

希望这也能有所帮助。

谢谢你的回答@PEHI检查一下。