Thema Datum  Von Nutzer Rating
Antwort
09.11.2021 10:32:52 Phaona
Solved
09.11.2021 18:24:26 ralf_b
NotSolved
10.11.2021 11:04:15 Phaona
NotSolved
10.11.2021 18:50:02 ralf_b
NotSolved
Rot Dropdown Multiselect
09.11.2021 20:55:57 xlKing
NotSolved
10.11.2021 11:15:32 Gast37135
NotSolved

Ansicht des Beitrags:
Von:
xlKing
Datum:
09.11.2021 20:55:57
Views:
199
Rating: Antwort:
  Ja
Thema:
Dropdown Multiselect

Hallo Phaona,

hab mal versucht den Code auseinanderzunehmen. Bin nicht sicher ob ich das so richtig verstehe. Die Qualität des Codes bewerte ich mal nicht. Bist ja noch nicht weit fortgeschritten. Solange er funktioniert, kann er aber so schlecht nicht sein.

1. Kapier ich aber überhaupt nicht. Wenn du wegklickst in eine andere Zelle und dann wieder in die Zelle, welche die Liste enthält, öffnet sich doch wie gewollt die Liste (hast du so programmiert). Und mit öffnen der Liste wird der in der Zelle enthaltene Wert markiert. Zumindest bei mir. Oder meinst du wenn du die bereits markierte Zelle nochmal anklickst? Dann schließt sich die Liste, das ist Standard und lässt sich nicht ändern. Aber du kannst vermeiden, dass du versehentlich in die Zelle rein klickst und stattdessen durch Doppelklick die Liste wieder öffnen. Hab das Before_Doubleklick-Ereignis mal deinem Code hinzugefügt.

2. Warum er bei SendKeys "%{down}" nicht nur die Liste öffnet sondern auch NumLock deaktiviert bzw. wieder aktiviert kann ich dir auch nicht sagen. Das ist ein wirklich nerviger Fehler im System. Aber das Problem kann man umgehen: Verwende stattdessen WshShell.Sendkeys und der Spuk ist vorbei. Hab ich dir mal im unten stehenden Code gleich mit eingebaut. Durch SendKeys "{SCROLLLOCK}" wird natürlich die Rollen-Taste aktiviert bzw. deaktiviert. Wenn du das nicht willst, lass diesen Befehl doch einfach weg. Hab ihn mal auskommentiert.

Den Code zur Sub floating_buttons hast du nicht gepostet. Ich kann also nicht beurteilen, ob dieser noch irgendwelche Auswirkungen hat.

'Dropdown mit Mehrfachauswahl & Remove if Double
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rngDV As Range
  Dim oldVal As String
  Dim newVal As String
  Dim lUsed As Long
  
  If Target.Count > 1 Then GoTo exitHandler
  If IsNumeric(Target) Then GoTo exitHandler
  If IsDate(Target) Then GoTo exitHandler
  If Target.HasFormula Then GoTo exitHandler
  On Error GoTo exitHandler
  If Target.Validation.Type <> 3 Then GoTo exitHandler
  
  'x = (Target.Validation)
  On Error Resume Next
  Set rngDV = Cells.SpecialCells(xlCellTypeConstants)
  
  On Error GoTo exitHandler
  If rngDV Is Nothing Then GoTo exitHandler
  If Not Intersect(Target, Me.Range("Verein")) Is Nothing Then Exit Sub
  Application.EnableEvents = False
  newVal = Target.Value
  Application.Undo
  oldVal = Target.Value
  Target.Value = newVal
  If Target.Column >= 2 Then '>=3 weil ab Spalte C
    If InStr(1, Target.Validation.Formula1, "=Liste") > 0 Then
      If oldVal = "" Then
        'do nothing
      Else
        If newVal = "" Then
          'do nothing
        Else
          lUsed = InStr(1, oldVal, newVal)
          If lUsed > 0 Then
            If Right(oldVal, Len(newVal)) = newVal Then
              Target.Value = Left(oldVal, Len(oldVal) - Len(newVal) - 2)
            Else
              Target.Value = Replace(oldVal, newVal & ", ", "")
            End If
          Else
            Target.Value = oldVal & ", " & newVal
          End If
        End If
      End If
    End If
  End If
  
exitHandler:
  Application.EnableEvents = True
End Sub
'open dropdown
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  
  Dim WshShell As Object
  Set WshShell = CreateObject("WScript.Shell")
  
  If (Target.Column > 8) Then
    Call floating_buttons
  Else
    On Error GoTo Err1:
    
    'If Target.Cells.Count = 1 Then
    If Target.Validation.InCellDropdown = True Then
      WshShell.SendKeys ("%{DOWN}")
    End If
  End If
   
  'MsgBox "Vorher"
  WshShell.SendKeys "%{DOWN}" ', True
  'MsgBox "Nachher"
  'DoEvents
  'SendKeys "{SCROLLLOCK}"

Err1:
  'do nothing
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Worksheet_SelectionChange Target
  Cancel = True
End Sub

Gruß 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
09.11.2021 10:32:52 Phaona
Solved
09.11.2021 18:24:26 ralf_b
NotSolved
10.11.2021 11:04:15 Phaona
NotSolved
10.11.2021 18:50:02 ralf_b
NotSolved
Rot Dropdown Multiselect
09.11.2021 20:55:57 xlKing
NotSolved
10.11.2021 11:15:32 Gast37135
NotSolved