Pole vybraných položek v ListBoxu

Postup:
Deklarujte v deklarační části formuláře:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
  (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
  lParam As Any) As Long 

Private Const LB_GETSELITEMS = &H191

Funkce pro zjištění počtu vybraných položek:

Function GetListBoxSelectRange(lb As ListBox) As Long() 

   Dim selCount As Long 

   ' Zjištění počtu vybraných položek (to samé jako vlastnost SelCount) 
   selCount = SendMessage(lb.hwnd, LB_GETSELCOUNT, 0, ByVal 0&) 

   ReDim result(0 To selCount) As Long 
   ' Načtení všech indexů v jedné operaci 
   If selCount > 0 Then 
      SendMessage lb.hwnd, LB_GETSELITEMS, selCount, result(1) 
   End If 

   GetListBoxSelectRange = result() 

End Function

Funkce vrací pole indexů všech vybraných položek v ListBoxu, první index začíná na hodnotě pole 1. Funkci pak můžete použít následovně:
   Dim i As Long 
   Dim indexes() As Long 
   indexes() = GetListBoxSelectRange(List1) 
   For i = 1 To UBound(indexes) 
      Debug.Print "Vybráno " & indexes(i) 
   Next

Zpět

Autor: The Bozena