Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

Listbox statt Datenliste?


Betrifft: Listbox statt Datenliste? von: Claudia
Geschrieben am: 18.11.2017 17:45:28

Hallo zusammen,

ich würde gerne Eure Hilfe in Anspruch nehme

In meiner Excel-Tabelle befülle ich die Spalte F ab Zeile 7 mit einer Liste (Datenüberprüfung). Diese Daten stehen in Spalte Z Zeile 2 bis 80 .

Die Liste von Excel ist ziemlich bescheiden, da unkomfortabel. Man kann nicht scrollen und es werden nur 8 Einträge aus der Liste wird angezeigt. Eine Eingabe eines Buchstabens z.B. zum direkten Anspringen geht auch.

Kann man sowas auch komfortabler machen? Mein Wunsch wäre, wenn ich in Spalte F mit dem Cursor bin, dass ich entweder einen Wert direkt eingeben kann oder per Listbox.

Lässt sich sowas realisieren? Vielen lieben Dank im Voraus!

LG Claudia

  

Betrifft: AW: Listbox statt Datenliste? von: onur
Geschrieben am: 18.11.2017 20:51:44

Datenüberprüfung ist ja auch nur dazu da, die Auswahl zu beschränken.
Für dich ist eher die ComboBox geeignet.
Mann kann sie sogar so programmieren, dass sie sich erweitert (automatisch nicht vorhandene Eingaben in die Liste aufnimmt).
Hier ein Beispiel:
https://www.herber.de/bbs/user/117759.xlsm


  

Betrifft: AW: Listbox statt Datenliste? von: onur
Geschrieben am: 18.11.2017 20:56:42

Vergessen, zu erwähnen:
Zum Testen erst Befüllen und danach einen Wert eingeben (mit "Enter" abschliessen), der nicht in der Liste ist.


  

Betrifft: AW: Listbox statt Datenliste? von: fcs
Geschrieben am: 18.11.2017 22:45:37

Hallo Claudia,

in der Beispieldatei hab ich dir ein entsprechendes Makro eingebaut.
https://www.herber.de/bbs/user/117760.xlsm
Bitte auch Hinweise im Tabellenblatt beachten.

Gruß
Franz


  

Betrifft: AW: Listbox statt Datenliste? von: Claudia
Geschrieben am: 19.11.2017 11:25:41

Hallo Ihr zwei,

vielen Dank für Eure Hilfe. Das ist super nett.

Die Lösung von Dir, Franz, wäre mein Favorit. Ich hätte aber noch paar Wünsche, in der Hoffnung, dass dies auch geht.

- Ich würde die Eingabe nur über die Liste machen wollen.
- Ist es möglich - wenn ich einen Buchstabe eingebe - dass die Liste dann zu diesen Buchstaben spring und ich dann die richtige Auswahl treffen? In Deiner Liste würde ich mit M zu M01 springen und könnte dort dann den gewünschten Wert auswählen.
- Nach der "finalen" Auswahl soll der Cursor immer in die nächsten Zeile und dort in die Spalte B springen. Vermutlich bräuchte man dann noch ein OK und ein Abbrechen Button?
- Ich habe die Liste um ein langes Wort erweitert was in der Auswahl dann aber nur zum Teil angezeigt wird. Ist es möglich, die Auswahlliste anzupassen, so dass ich den gesamten Begriff sehen kann?

Ich weiß, dass sind noch paar Extra-Wünsche. Ich hoffe, dass jemand (vielleicht Du Franz?) mir noch einmal helfen kann.

Vielen lieben Dank!

LG CLaudia


  

Betrifft: AW: Listbox statt Datenliste? von: Claudia
Geschrieben am: 19.11.2017 12:23:59

Hallo zusammen,

nach dem ich das Makro von Dir, Onur, nun richtig verstanden habe, ist das meine Lösung.

Ich habe mit etwas ausprobieren rausbekommen, wie ich den Ausgabebereich verändern kann.

Ihr habt mir beide sehr geholfen. Vielen vielen Dank!

Ich wünsche Euch ein schönes Restsonntag.

LG Claudia


  

Betrifft: AW: Listbox statt Datenliste? von: fcs
Geschrieben am: 20.11.2017 14:00:18

Hallo Claudia,

- Ich würde die Eingabe nur über die Liste machen wollen.

Daran kann dich ja niemand hindern, die Datengültigkeitsprüfung wäre dann nur ein Absicheung gegen manuelle Falscheingaben.

- Ist es möglich - wenn ich einen Buchstabe eingebe - dass die Liste dann zu diesen Buchstaben spring und ich dann die richtige Auswahl treffen? In Deiner Liste würde ich mit M zu M01 springen und könnte dort dann den gewünschten Wert auswählen.
Diese Funktionalität kann man über die Eigenschaften der Listbox einstellen (MatchEntry = 0 - frmMatchEntryFirstLetter) und ist meines Wissens die Standardeinstellung für Listboxen.

- Nach der "finalen" Auswahl soll der Cursor immer in die nächsten Zeile und dort in die Spalte B springen. Vermutlich bräuchte man dann noch ein OK und ein Abbrechen Button?
Im Makro hab ich es jetzt so eingerichtet, dass mit ENTER oder Pfeiltasten links/rechts die Listbox verlassen und Spalte B in der Folgezeile selektiert wird. Ebenso wenn nach der Auswahl eine beliebige Zelle per Maus selektiert/die Listbox verlassen wird.

- Ich habe die Liste um ein langes Wort erweitert was in der Auswahl dann aber nur zum Teil angezeigt wird. Ist es möglich, die Auswahlliste anzupassen, so dass ich den gesamten Begriff sehen kann?
Hier musst du wie bereits beschrieben den Entwurfsmodus für die Steuerelemente aktivieren, dann kannst du die Breite der Listbox vergrößern.

Gruß
Franz

Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
        Case 13, 37, 39 'Enter, Pfeil links, Pfeil rechts
            Application.EnableEvents = False
            With Me.ListBox1
                'bei verlassen der Listbox nächste Zeile Spalte B selektieren
                Me.Cells(Me.Range(.LinkedCell).Row + 1, 2).Select
                .LinkedCell = ""
                .Visible = False
            End With
            Application.EnableEvents = True
        Case Else
            'do nothing
'            MsgBox KeyCode
    End Select
End Sub

Private Sub ListBox1_LostFocus()
    Application.EnableEvents = False
    With Me.ListBox1
        'bei verlassen (z.B. mit Maus) der Listbox nächste Zeile Spalte B selektieren
        Me.Cells(Me.Range(.LinkedCell).Row + 1, 2).Select
        .LinkedCell = ""
        .Visible = False
    End With
    Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim varWert
    On Error GoTo Fehler
    'Prüfen ob eine auszufüllende Zelle selektiert wurde - hier ggf. die Prüfbedingen _
        bzw.den Wert für Row/Column anpassen - aktuell Zelle C1
    If Target.Row >= 7 And Target.Cells.Count And Target.Column = 6 Then   'Spalte mit Listbox1
        varWert = Target
        With Me.ListBox1
            'neue Position der Listbox
            .Left = Target.Offset(0, 1).Left
            .Top = Target.Offset(0, 0).Top
            'verknüpfte Zelle auf gewählte Zelle setzen
            .LinkedCell = "'" & Me.Name & "'!" & Target.Address
            'Listboxwert als obersten Wert in Listbox setzen
            If IsEmpty(varWert) Then
                .TopIndex = 0
            Else
                .TopIndex = .ListIndex
Resume01:
            End If
            .Visible = True
            .Activate    'Listbox nach Zellauswahl direkt aktivieren
'Scrollvorgang erforderlich, da sonst gelegtenlich chaotische Anzeige von aktiver Zelle und  _
Listbox
            ActiveWindow.ScrollRow = Target.Row - 2
        End With
    End If
Fehler:
    With Err
        Select Case .Number
            Case 0 'alles OK
            Case 440, 380 'Wert in Zelle ist nicht in Auswahlliste der Listbox
                MsgBox "Wert in Zelle ist nicht in Auswahlliste der Listbox"
                With Me.ListBox1
                    .ListIndex = -1
                    .TopIndex = 0
                    Resume Resume01
                End With
            Case Else
                MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
        End Select
    End With
End Sub




Beiträge aus den Excel-Beispielen zum Thema "Listbox statt Datenliste?"