Thema Datum  Von Nutzer Rating
Antwort
20.10.2021 12:33:46 Alisa
NotSolved
20.10.2021 17:11:23 Gast15772
NotSolved
20.10.2021 18:15:25 xlKing
NotSolved
Blau Dropdown-VBA
20.10.2021 19:45:02 xlKing
NotSolved

Ansicht des Beitrags:
Von:
xlKing
Datum:
20.10.2021 19:45:02
Views:
493
Rating: Antwort:
  Ja
Thema:
Dropdown-VBA

Hallo nochmal,

weil mich das Thema interessiert hat, hab ich dir da mal was gebaut. Schau dir also mal dieses Beispiel hier an. 

Wie gelangt man zu diesem Ergebnis?

  1. Sofern noch nicht vorhanden aktiviere die Entwicklertools, z.B. indem du mit der rechten Maustaste auf die Symbolleiste gehst und auf der Rechten Seite das Häkchen bei Entwicklertools setzt.
  2. Füge eíne ActiveX-Listbox in dein Tabellenblatt ein und prüfe oben links neben der Formelleiste den Namen. Da sollte "Listbox1" stehen.
  3. Prüfe in den Entwicklertools ob der Entwurfsmodus aktiviert ist. Wenn nicht aktiviere ihn
  4. Mache Rechtsklick auf die Listbox und wähle Eigenschaften
  5. Hier kannst du neben dem Namen weitere Eigenschaften setzen.
    1. zunächst solltes du in ListFillRange den Bezug auf deine Datenliste setzen. Hier Tabelle2!A1:B6.
    2. wenn die Daten Überschriften haben setze ColumnHeads auf True
    3. Setze ColumnCount auf die Anzahl der Spalten deiner Datenliste
    4. in den ColumWidths kannst du die Spaltenbreiten anpassen.
    5. Setze Multiselect auf 1
  6. Deaktiviere nun den Entwurfsmodus und drücke Alt + F11 um in die Codeansicht zu kommen. Gib in dem Tabellenmodul, das deine Listbox enthält nun z.B. diesen Code ein:
Dim ActChange As Boolean
Private Sub ListBox1_Change()
  Dim t As String, w As Double
  
  If Not ActChange Then
    With ListBox1
      For i = 0 To .ListCount - 1
        If .Selected(i) Then
          t = t & .List(i, 0) & ","
          w = w + .List(i, 1)
        End If
      Next i
    End With
  
    If t <> "" Then t = Left(t, Len(t) - 1)
    ActiveCell.Value = t
    ActiveCell.Offset(0, 1).Value = w
  End If
  
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Intersect(Target, Range("D:D")) Is Nothing Then
    With ListBox1
      .Top = ActiveCell.Offset(1, 0).Top
      .Left = ActiveCell.Left
      
      ActChange = True
      For i = 0 To .ListCount - 1
        If InStr(ActiveCell.Value, .List(i, 0)) > 0 Then
          .Selected(i) = True
        Else
          .Selected(i) = False
        End If
      Next i
      ActChange = False
      
      .Visible = True
    End With
  Else
    ListBox1.Visible = False
  End If
End Sub
 

Sofern ich beim Aufschreiben hier keinen Schritt vergessen habe müsste jetzt bei einem Klick in die Spalte D die Listbox erscheinen. Wenn du eine andere Spalte anklickst verschwindet die Listbox wieder (wird unsichtbar). Wenn du einen oder mehrere Einträge in der Listbox auswählst, so werden in der AktivenZelle in Spalte D die Auswahlwerte hintereinander geschrieben (mit Komma getrennt). Außerdem werden alle Eurowerte addiert und in der Zelle rechts daneben (Offset(0, 1)) die Summe ausgegeben. Wenn du eine Zelle in Spalte D auswählst, die bereits eine Wertauflistung enthält, so werden diese Werte automatisch in der Liste ausgewählt.

Ich denke, das wäre eine für den Nutzer komfortable Lösung. Falls es nicht so aufwendig sein muss, können wir aber auch gern deine bestehende Lösung weiterentwickeln. 

Liebe Grüße
Mr. K.


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
20.10.2021 12:33:46 Alisa
NotSolved
20.10.2021 17:11:23 Gast15772
NotSolved
20.10.2021 18:15:25 xlKing
NotSolved
Blau Dropdown-VBA
20.10.2021 19:45:02 xlKing
NotSolved