В Access2000 есть форма с ListBox-ом "lst_Added". Его св-ву RowSource присваивается строка из значений, разделённых символами "; ". Есть такая функция:
- Код: Выделить всё
Function DelSelected(Strng As String, ptrn As String)
Dim RegEx As Object
Set RegEx = CreateObject("vbscript.regexp")
' set the RegExp parameters
With RegEx
'look for global matches
.Global = True
'look for strings matching following pattern
.Pattern = ptrn
End With
If RegEx.Test(Strng) Then _
Strng = RegEx.Replace(Strng, "")
DelSelected = Strng
End Function
(Предварительно в системе зарегистрена scrrun.dll)
Задумка состоит в том, чтоб из вышеупомянутого листбокса удалялись выделенные значения (его св-во Multiselect выставлено в 1).
Вопрос:
Почему вот это работает:
- Код: Выделить всё
Private Sub btn_Left_Click()
Dim varItem As Variant
For Each varItem In Me!lst_Added.ItemsSelected
Debug.Print Me!lst_Added.ItemData(varItem)
Next varItem
End Sub
- только как-то странно, даже если выделено два значения, они печатаются за один проход цикла For...Next.
А вот это нет:
- Код: Выделить всё
Private Sub btn_Left_Click()
Dim varItem As Variant
For Each varItem In Me!lst_Added.ItemsSelected
Me![lst_Added].RowSource = _
DelSelected(CStr(Me![lst_Added].RowSource), _
CStr(Me!lst_Added.ItemData(varItem)) & "; ")
Next varItem
End Sub
- удаляется только первое выделенное значение. И что это за коллекция такая странная ItemsSelected, в которой только один ключ "Count" и больше ничего?