vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Access   |   VB-Versionen: VBA28.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 OtterBewertung:  Views:  33.960 
www.tools4vb.deSystem:  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



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.