Rubrik: Access | VB-Versionen: VBA | 28.04.05 |
AddItem/RemoveItem für die Access-ListBox Zwei universelle Routinen, um die Access-ListBox mit den fehlenden Methoden "AddItem" und "RemoveItem" nachzurüsten | ||
Autor: Dieter Otter | Bewertung: | Views: 33.960 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Die Access-ListBoxBox bietet zwar auch ihre Vorteile, doch vermissen gerade VB-Umsteiger zwei wichtige Methoden: AddItem und RemoveItem
Wie man die Access-ListBoxBox nachträglich um diese beiden Methoden erweitern kann, zeigt folgender Code.
Die ListBox in Access muss hierbei als "Werteliste" festgelegt werden:
Private Sub Form_Load() ' Werte-Liste List1.RowSourceType = "Value List" End Sub
Das Löschen des Inhaltes geht dann so:
' Liste löschen List1.RowSource = ""
Einen neuen Eintrag hinzufügen:
Private Sub AddItem(oList As Object, ByVal sItem As String, _ Optional Index As Variant) ' Neuen Eintrag in Liste hinzufügen Dim i As Long Dim sList As String Dim nPos As Long Dim sTemp As String If IsMissing(Index) Then Index = oList.ListCount If Index >= oList.ListCount Then ' ans Ende anfügen oList.RowSource = oList.RowSource & sItem & ";" ElseIf Index < 1 Then ' am Anfang einfügen oList.RowSource = sItem & ";" & oList.RowSource Else ' irgendwo dazwischen einfügen sTemp = oList.RowSource i = 0 oList.RowSource = "" While Len(sTemp) > 0 nPos = InStr(sTemp, ";") If nPos > 0 Then sList = Left$(sTemp, nPos - 1) sTemp = Mid$(sTemp, nPos + 1) Else sList = sTemp: sTemp = "" End If If i = Index Then sList = sItem & ";" & sList oList.RowSource = oList.RowSource & sList & ";" i = i + 1 Wend End If End Sub
Aufruf:
' Eintrag am Ende hinzufügen AddItem List1, "Neuer Eintrag" ' Eintrag am Anfang einfügen AddItem List1, "Neuer Eintrag", 0
Einen Eintrag löschen:
Private Sub RemoveItem(oList As Object, ByVal Index As Long) ' Eintrag aus Liste löschen Dim sTemp As String Dim i As Long Dim nPos As Long Dim sList As String Dim nIndex As Long sTemp = oList.RowSource oList.RowSource = "" i = 0 While Len(sTemp) > 0 nPos = InStr(sTemp, ";") If nPos > 0 Then sList = Left$(sTemp, nPos - 1) sTemp = Mid$(sTemp, nPos + 1) Else sList = sTemp: sTemp = "" End If If i <> Index Then oList.RowSource = oList.RowSource & sList & ";" End If i = i + 1 Wend End Sub
Aufruf:
' aktuell selektierten Eintrag löschen RemoveItem List1, List1.ListIndex
Den aktuell selektierten Eintrag auslesen:
If List1.ListIndex >= 0 Then MsgBox List1.Value