Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Listbox Auswahl nicht verlieren

Forumthread: Listbox Auswahl nicht verlieren

Listbox Auswahl nicht verlieren
Daniel
Guten Morgen allerseits,
folgende Situation: mit einem CommandButton(ActiveX) rufe ich eine Userform mit einer Listbox auf, deren Inhalt (das sind die sieben Wochentage) automatisch aus bestimmten Zellen eingelesen wird. Per Klick auf einen Button innerhalb der Userform wird die jeweils vorgenommene (Mehrfach-)Auswahl in einen Zellbereich geschrieben (ohne Leerzeilen), mit einem weiteren Button können die ausgewählten Listbox-Einträge (und auch deren in die Zellen geschriebenen Kopien) gelöscht werden.
Diesen Part habe ich gestern mühsam gelernt, und seit heute früh funktioniert es auch.
Natürlich stellen sich nun weitere Fragen, für die ich Euch um Hilfe bitte:
1.) Was muss ich tun, damit nach erfolgter Auswahl in der Listbox diese Markierungen bei einem weiteren Aufruf der Userform mit der Listbox wieder angezeigt/als ausgewählt markiert werden? Momentan ist bei jedem Aufruf der erste mögliche Eintrag mit einem gepunkteten Rahmen umgeben.
2.) Wie kann ich erreichen, dass die Userform nur geschlossen werden kann, wenn mindestens ein Eintrag aus der Listbox ausgewählt wurde?
Ich freue mich über Unterstützung sehr.
Gruß
Daniel
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Listbox Auswahl nicht verlieren
09.08.2011 12:54:48
Daniel
Ich bin einen Schritt weiter.
Zu 2.): ich habe mindestens einen Eintrag zu erzwungen, in dem ich die einzige Möglichkeit die Userform zu schließen ("das x-Kreuz" habe ich deaktiviert), das ist der erste Button in der Userform, in seiner Eigenschaft "enable" standardmäßig auf "false" gesetzt habe. "enable" wird wieder auf "true" gesetzt durch dieses hier:
Private Sub ListBox1_Change()
If ListBox1.ListIndex  0 Then cmd1.Enabled = True
End Sub
Die Frage 2.) ist damit aber leider nicht vollständig gelöst. Wenn ich in der Listbox einen Eintrag auswähle und durch einen weiteren Klick die Auswahl wieder zurücknehme, kann ich die Userform mit dem Button doch schließen. Um den Eintrag herum ist wieder diese gepunktete dünne Linie zu sehen.
Ich habe das Gefühl, dass auch meine ungelöste Frage 1.) vielleicht das gleiche "Ding" als Ursprung des Problems hat.
Kann mir vielleicht jemand zur Seite springen und mir behilflich sein?
Gruß
Daniel
Anzeige
AW: Listbox Auswahl nicht verlieren
09.08.2011 15:11:34
fcs
Hallo Daniel,
die Change-Ereignis-Prozedur muss man so anpassen, dass die Selected-Eigenschaft aller Listbox-Einträge geprüft wird, und danach dann ggf. der Command-Button Enabled auf True/False gesetzt wird.
Frühere Auswahl im Userform wieder anzeigen.
Wenn du "nur" die aktuell ausgewählten Werte immer wieder anzeigen willst, dann muss du das Userform mit der Hide-Methode ausblenden.
Willst du die Auswahlwerte auch nach dem Schließen und erneutem Öffnen der Datei im Userform anzeigen wird es komplizierter. Dann müssen die Zellen in den die ausgewählten Werte eingetragen werden, in der Initialisierungsprozedur des Userforms ausgewerted werden und die Selected-Eigenschaft der Listbox-EInträge entsprechend auf True oder False gesetzt werden.
Gruß
Franz
Private Sub cmd1_Click()
'OK-Button
'Anweisungen zum Speichern der Information aus dem Userform in Tabelle
Me.Hide 'Userform ausblenden - aktuelle Daten im Userform bleiben erhalten bis zum Schliessen  _
der Datei _
oder Unload-Methode für das userform
End Sub
Private Sub ListBox1_Change()
Dim bButtonTrue As Boolean, ii As Integer
With Me.ListBox1
For ii = 0 To .ListCount - 1
If .Selected(ii) = True Then
bButtonTrue = True
Exit For
End If
Next
If bButtonTrue = True Then
Me.cmd1.Enabled = True
Else
Me.cmd1.Enabled = False
End If
End With
End Sub

Anzeige
AW: Listbox Auswahl nicht verlieren
09.08.2011 16:04:26
Daniel
Aha! Vielen Dank Franz. Das hilft mir schon sehr weiter. Das change-Ereignis funtktioniert nun toll! Und auch mit "hide" anstatt "unload" bin ich einen deutlichen Schritt weiter, klappt auch schön.
Dummerweise wollte ich die Auswahl(en) der Listbox aber mit der Datei speichern und mit dem Schließen nicht verlieren. Wie der grundsätzliche Ansatz ist hast Du ja beschrieben, kannst Du dennoch ein bißchen nachhelfen, weil ich kein VBA-Mensch bin. Ich kämpfe mich da eher so durch.
viele Grüße
Daniel
Anzeige
AW: Listbox Auswahl nicht verlieren
09.08.2011 22:05:12
fcs
Hallo Daniel,
die Methode, wie man am geschicktesten, die vorhandenen Tabelleneinträge auswertet und die entsprechenden Einträge in der Liste markiert, hängt ein wenig von der Anordnung der Einträge im Tabellenblatt ab.
So wie ich deine Hinweise in deiner 1. Frage verstehe, dann kannst du schon die markierten Einträge auswerten und in ein Tabellenbellenblatt eintragen. D.h. du hast einen Tabellenbereich mit den Auswahlwerten Montag bis Sonntag = RowSource der Auswahlliste?
Und du schreibst die Auswahlwerte z.B. Montag, Mittwoch, Freitag in andere Zellen untereinander?
Für das Setzen der Einträge in der Listbox beim Öffnen der Userform geht das jetzt rückwärts.
In einer Schleife werden der Zellen abgefragt und mit den Werten der Listbox verglichen, stimmt der Wert überein, dann wird die Selected-Eigenschaft auf True gesetzt.
In der Beispieldatei hab ich das mal umgesetzt.
https://www.herber.de/bbs/user/76084.xls
Gruß
Franz
Anzeige
AW: Listbox Auswahl nicht verlieren
10.08.2011 16:49:58
Daniel
Hallo Franz,
ich mache gerade einen Luftsprung, vielen Dank für Deine Hilfe und die Beispieldatei. Der Code macht in der Tat genau, was ich erreichen wollte. Ich werde mich mal ein bißchen näher mit diesen Schleifen befassen, denn die sind hier wohl der "schlaue Part", um nicht zu sagen des Rätsels Lösung. Besten Dank noch einmal, so habe ich dieses Problem endlich aus dem Nacken.
Viele Grüße
Daniel
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Listbox-Auswahl in Excel Userform beibehalten


Schritt-für-Schritt-Anleitung

  1. Userform erstellen: Erstelle eine Userform mit einer Listbox und einem CommandButton (ActiveX).
  2. Inhalte der Listbox füllen: Fülle die Listbox mit den Wochentagen aus einem Zellbereich. Verwende die RowSource-Eigenschaft der Listbox.
  3. Auswahl speichern: Implementiere einen Button, der die Auswahl der Listbox in einen Zellbereich schreibt, ohne Leerzeilen zu hinterlassen.
  4. Auswahl beim Öffnen anzeigen: Um die Auswahl beizubehalten, musst du die Selected-Eigenschaft der Listbox-Einträge in der Initialisierungsprozedur der Userform setzen. Beispiel:
    Private Sub UserForm_Initialize()
       Dim i As Integer
       For i = 0 To ListBox1.ListCount - 1
           ListBox1.Selected(i) = Not IsEmpty(Range("A" & (i + 1)).Value) ' Beispiel: Zellen A1 bis A7
       Next i
    End Sub
  5. Userform schließen: Deaktiviere das Schließen der Userform, solange kein Eintrag ausgewählt ist. Beispiel:
    Private Sub ListBox1_Change()
       cmd1.Enabled = ListBox1.ListIndex <> -1
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Auswahl wird nicht angezeigt
    Lösung: Stelle sicher, dass du die UserForm_Initialize-Prozedur korrekt implementiert hast, um die Selected-Eigenschaften der Listbox-Einträge zu setzen.

  • Fehler: Userform kann ohne Auswahl geschlossen werden
    Lösung: Überprüfe die ListBox1_Change-Prozedur und stelle sicher, dass der CommandButton nur aktiviert wird, wenn mindestens ein Eintrag ausgewählt ist.


Alternative Methoden

  • Hide-Methode verwenden: Anstatt die Userform mit Unload zu schließen, kannst du die Hide-Methode verwenden, um die Auswahl zu behalten.
  • Datenbank speichern: Eine weitere Methode ist, die Auswahlwerte in einer Datenbank oder in einer Tabelle zu speichern, um sie später wiederherzustellen.

Praktische Beispiele

Hier ist ein einfaches Beispiel, um die Auswahl der Wochentage zu speichern:

Private Sub cmd1_Click()
    Dim i As Integer, output As String
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then
            output = output & ListBox1.List(i) & vbCrLf
        End If
    Next i
    Range("B1").Value = output ' Ausgabe in Zelle B1
    Me.Hide ' Benutzerform verstecken
End Sub

Tipps für Profis

  • Schleifen und Arrays: Nutze Schleifen, um die Listbox-Einträge effizient zu verwalten. Arrays können helfen, Daten zwischenzuspeichern.
  • Datenvalidierung: Implementiere eine Datenvalidierung, bevor die Auswahl gespeichert wird, um unerwartete Eingaben zu vermeiden.
  • Ereignisprozeduren: Verwende Ereignisprozeduren wie ListBox1_Click, um dynamische Interaktionen zu ermöglichen.

FAQ: Häufige Fragen

1. Wie kann ich die Auswahl der Listbox beim Schließen der Userform speichern?
Du kannst die Auswahl in Zellen speichern und beim Öffnen der Userform wiederherstellen, indem du die UserForm_Initialize-Prozedur nutzt.

2. Was mache ich, wenn die Listbox nicht die korrekten Werte anzeigt?
Überprüfe, ob die RowSource-Eigenschaft korrekt gesetzt ist und die Daten in den Zellen vorhanden sind.

3. Wie kann ich mehrere Einträge in der Listbox gleichzeitig auswählen?
Stelle sicher, dass die MultiSelect-Eigenschaft der Listbox auf fmMultiSelectMulti gesetzt ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige