在某些情况下,我需要使用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触发。
答案 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 '>>>
希望它也会有所帮助。