Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Auswahl von Datensätzen mit Checkbox per Listbox
zurück: Access 2007 nicht erkennbares Datenbankformat Access 2010 weiter: Timer Message Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
01. Mai 2012, 00:04
Rufname:

Auswahl von Datensätzen mit Checkbox per Listbox - Auswahl von Datensätzen mit Checkbox per Listbox

Nach oben
       Version: Office 2003

Hallo zusammen,

bisweilen benötigt man es in einer Datenbank, daß der User einen Datensatz auswählen kann, meist, indem er eine Checkbox anklicken soll.

Problem eines Endlosformulars in Access ist aber (wie allgemein bekannt), daß ungebundene Controls für alle Datensätze des Endlosformulars gleich angezeigt werden und damit nicht getrennt behandelt werden können.

Eine Variante ist die Standard-Listbox von Access, damit kann man eine Mehrfachauswahl erzeugen, was aber optisch unschön ist, denn eine Checkbox weist bereits optisch darauf hin, daß hier etwas auszuwählen ist.

Eine andere Variante ist, eine Zusatztabelle anzulegen, in die man alle IDs hineinkopiert, die der Benutzer auswählen können soll, sowie die BenutzerID, damit viele User gleichzeitig damit arbeiten können. Dann kann man beim Starten des Formulars diese Liste für den aktuellen User löschen und mit den aktuellen IDs befüllen und per Abfrage mit den anzuzeigenden Daten der eigentlichen Datentabelle verknüpfen, dann funktioniert die Checkbox wieder im Endlosformular, da diese nun eine Spalte dieser Zusatztabelle ist.
Umständlich, aber manchmal die einzige Lösung.

Es gibt aber noch eine andere Alternative, die unbekannter ist: Man kann per ActiveX-Controls aus der Liste der "Microsoft Forms" Controls die dortige Listbox in Access einbauen. Diese hat eine Besonderheit, die nur diese Listbox-Variante bietet: Wenn man hier die Option "ListStyle" von "Plain" auf "Option" umstellt, erhält man eine zusätzliche erste Spalte, die je nach Auswahl in "MultiSelect" entweder ein Radiobutton oder eine Checkbox darstellt. Beim Radiobutton (MultiSelect = Single) kann man nur einen Datensatz auswählen, bei der Checkbox je nach Variante von MultiSelect mehrere, bei "Multi" klickt man einfach auf die gewünschte Zeile, bei "Extended" funktioniert die Auswahl wie bei den meisten Windows-Listboxen: STRG festhalten für Mehrfachauswahl, SHIFT festhalten für Von-bis-Auswahl und ohne beides Einzelauswahl.

Praktischerweise braucht man hier keine zusätzliche Tabelle, um die Checkbox zu definieren und schöner als die Standard-Listbox ist es auch.

Die angehängte Datenbank (im Format A2003) zeigt ein Beispiel, wie man die Listbox mit zwei Spalten befüllen und die Auswahl auswerten kann.

Viel Spaß beim Ausprobieren

Christian



CheckboxAuswahl.zip
 Beschreibung:
Zeigt, wie man die MSForms Listbox zur Auswahl von Datensätzen mit angezeigter Checkbox/Radiobutton verwenden kann. (Format: A2003)

Download
 Dateiname:  CheckboxAuswahl.zip
 Dateigröße:  18.27 KB
 Heruntergeladen:  426 mal

Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
17. Jun 2012, 20:26
Rufname:


AW: Auswahl von Datensätzen mit Checkbox per Listbox - AW: Auswahl von Datensätzen mit Checkbox per Listbox

Nach oben
       Version: Office 2003

Hier ist nun eine andere Variante, wie man mit Access-Bordmitteln und ohne Zuhilfenahme einer Hilfstabelle einen oder mehrere Datensätze mit einer Checkbox oder einem Optionbutton in einem Endlosformular auswählen kann.

Bekanntermaßen haben ungebundene Elemente in einem Endlosformular alle den gleichen Inhalt, daher kann man ungebundene Elemente schlecht für solche Zwecke einsetzen. Aber: Ein ungebundenes Element kann auf einer Funktion basieren, und wenn diese auf einem Feldwert basiert, wird zwar aus dem ungebundenen wieder ein gebundenes und das kann man nicht ändern (weil es seinen Wert aus der Funktion bezieht), aber man kann ja trotzdem die Events auswerten, einen passenden Variablenwert im Hintergrund ändern und die Funktion liefert diesen zurück - und so hat man den Effekt eines ungebundenen Controls mit einem individuellen Wert je Zeile!

Diese Idee habe ich nun in eine Klasse umgeschrieben, so daß man diese universell in allen möglichen Formularen einsetzen kann. Alles, was man dazu braucht, ist folgender Code im eigenen Formular:
Code:
Option Compare Database
Option Explicit

Public objRecordSelect As clsCCRecordSelect

Private Sub cmdShowSelection_Click()
    MsgBox objRecordSelect.SelectedIDs
End Sub

Private Sub Form_Load()
    Set objRecordSelect = New clsCCRecordSelect
    objRecordSelect.InitSelect Me, Me.chkMultiSelect, "ID", "tblTest", , enmCCRecordSelectionMode_Multiple
End Sub
Die Public-Variable "objRecordSelect" ist zwingend notwendig und muß auch genau so heißen, da sie in der Funktion fnGetSelection im Modul "modCCRecordSelect" aufgerufen wird.

Im Beispiel muß im Formular eine Checkbox namens "chkMultiSelect" vorhanden sein, der Name ist aber beliebig.

Neben diesem Code benötigt man das Modul "modCCRecordSelect" und die Klasse "clsCCRecordSelect", das ist alles.

In der Klasse sind auch weitere Methoden implementiert, über die man die ausgewählten IDs als kommaseparierten String zurückbekommt, die ausgewählten IDs löschen oder ein Recordset mit den ausgewählten Zeilen zurückerhalten kann.

Somit gibt es nun auch für das Problem "Datensatzauswahl" eine sehr einfache Lösung, die keine externen Controls benötigt. Selbst bei getesteten 10000 Datensätzen ist die Lösung immer noch fix genug, so daß man kaum bemerkt, was da alles im Hintergrund passiert.

Viel Spaß beim Ausprobieren

Christian



SelectRecords.zip
 Beschreibung:
Auswahl von einem oder mehreren Datensätzen mit Access-Bordmitteln ohne Hilfstabellen in einem Endlosformular, Format A2000-A2007.
SelectRecords V1.0

Download
 Dateiname:  SelectRecords.zip
 Dateigröße:  526.16 KB
 Heruntergeladen:  356 mal

derArb
getting better


Verfasst am:
17. Jun 2012, 23:48
Rufname: derArb
Wohnort: Berlin

AW: Auswahl von Datensätzen mit Checkbox per Listbox - AW: Auswahl von Datensätzen mit Checkbox per Listbox

Nach oben
       Version: Office 2003

Hallo,
merci Bitsqueezer,
da hab ich was zum Ausprobieren auf meiner Fahrt in den Urlaub am Bodensee.

_________________
MfG
derArb

Scio me nihil scire...Εν οίδα οτι ουδέν οίδα... Ich weiss, dass ich nichts weiss (Sokrates)
Ich bevorzuge Beiträge mit korrekter deutscher Grammatik.
Willi Wipp
Moderator


Verfasst am:
17. Jul 2012, 10:06
Rufname:
Wohnort: Raum Wiesbaden


AW: Auswahl von Datensätzen mit Checkbox per Listbox - AW: Auswahl von Datensätzen mit Checkbox per Listbox

Nach oben
       Version: Office 2003

Hi Alle,

bitte Nachfragen zu diesem Thema im Forum Access Programmierung / VBA
beim Thema Auswahl von Datensätzen mit Checkbox per Lbox (Nachgefragt) stellen.

SL Willi Wipp

Im abgetrennten Teil: Bitsqueezer am 17. Jul 2012 um 00:27 hat folgendes geschrieben:
Hallo,

freut mich, wenn's denn doch noch geklappt hat.

Hier hast Du eine Erweiterung für die Klasse, mit der Du alle Checkboxen setzen, löschen oder invertieren kannst:
Code:
'---------------------------------------------------------------------------------------
' Procedure   : SetAllTo
' Date        : 17.07.2012
' Last Change : 17.07.2012
' Purpose     : Alle Checkboxen löschen oder setzen
' Parameters  : bolValue: True = alle setzen, False = alle löschen
' Returns     :  -
'---------------------------------------------------------------------------------------
'
Public Sub SetAllTo(bolValue As Boolean)
    Dim varValue As Variant
    Dim strID As String
    Dim colCopy As Collection
   
    Set colCopy = New Collection
    If Not prv_ColIDs Is Nothing Then
        If Not prv_ColIDs.Count = 0 Then
            For Each varValue In prv_ColIDs
                strID = Split(varValue, "|")(0)
                colCopy.Add strID & "|" & IIf(bolValue, "True", "False"), strID
            Next varValue
            Set prv_ColIDs = colCopy
            Set colCopy = Nothing
            prv_Form.Recalc
        End If
    End If
End Sub

'---------------------------------------------------------------------------------------
' Procedure   : InvertAll
' Date        : 17.07.2012
' Last Change : 17.07.2012
' Purpose     : Auswahl invertieren
' Returns     :  -
'---------------------------------------------------------------------------------------
'
Public Sub InvertAll()
    Dim varValue As Variant
    Dim strValues() As String
    Dim strID As String
    Dim strSelection As String
    Dim colCopy As Collection
   
    Set colCopy = New Collection
    If Not prv_ColIDs Is Nothing Then
        If Not prv_ColIDs.Count = 0 Then
            For Each varValue In prv_ColIDs
                strValues = Split(varValue, "|")
                strID = strValues(0)
                strSelection = strValues(1)
                colCopy.Add strID & "|" & IIf(CBool(strSelection), "False", "True"), strID
            Next varValue
            Set prv_ColIDs = colCopy
            Set colCopy = Nothing
            prv_Form.Recalc
        End If
    End If
End Sub
Der Aufruf im Formular erfolgt dann ganz einfach so:
Code:
Private Sub cmdInvert_Click()
    objRecordSelect.InvertAll
End Sub

Private Sub cmdRemoveAll_Click()
    objRecordSelect.SetAllTo False
End Sub

Private Sub cmdSelectAll_Click()
    objRecordSelect.SetAllTo True
End Sub

Gruß

Christian
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Tabellen per update verändern??? 5 segel12 1606 22. Aug 2005, 07:49
stpimi Tabellen per update verändern???
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage mit Auswahl 4 Apostilb 671 18. Aug 2005, 11:04
Apostilb Abfrage mit Auswahl
Keine neuen Beiträge Access Tabellen & Abfragen: Auswahl einer Abfrage über MessageBox 8 Apostilb 777 12. Aug 2005, 08:30
Apostilb Auswahl einer Abfrage über MessageBox
Keine neuen Beiträge Access Tabellen & Abfragen: Auswahl 5 Hookbook 479 12. Jul 2005, 11:53
Willi Wipp Auswahl
Keine neuen Beiträge Access Tabellen & Abfragen: Buchverwaltung per Access 2 Rumpel29 7473 30. Mai 2005, 17:34
Ramespure Buchverwaltung per Access
Keine neuen Beiträge Access Tabellen & Abfragen: Access Abfrage per Stichtag 3 Teresa 1711 16. Mai 2005, 13:26
jens05 Access Abfrage per Stichtag
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage per Menüeingabe 23 adiag 4214 29. Apr 2005, 12:50
McLord Abfrage per Menüeingabe
Keine neuen Beiträge Access Tabellen & Abfragen: Wie mache ich per Abfrage 305 -> K3.05? 2 Maik_25 792 21. Jan 2005, 10:38
Maik_25 Wie mache ich per Abfrage 305 -> K3.05?
Keine neuen Beiträge Access Tabellen & Abfragen: Tabelle per SQL umbennen (Access 2000) 2 DerPater 1084 09. Dez 2004, 14:02
Gast Tabelle per SQL umbennen (Access 2000)
Keine neuen Beiträge Access Tabellen & Abfragen: Probleme mit Datensätzen in Tabellen 0 Jörg O 403 14. Sep 2004, 12:20
Jörg O Probleme mit Datensätzen in Tabellen
Keine neuen Beiträge Access Tabellen & Abfragen: Einen Wert per Abfrage in mehreren Tabellenspalten suchen 2 Danny G. 606 10. Sep 2004, 18:22
Danny G. Einen Wert per Abfrage in mehreren Tabellenspalten suchen
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage mit bestimmter Anzahl von Datensätzen PRO Kategorie 0 olivermk 486 10. Aug 2004, 18:44
olivermk Abfrage mit bestimmter Anzahl von Datensätzen PRO Kategorie
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft-Excel Diagramme