Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1832to1836
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Scrollen in CB mit Mausrad
28.05.2021 17:28:59
reiner
Hallo Leute,
https://www.herber.de/bbs/user/146414.xlsb
in der Beispieldatei wird eine CB 2-spaltig befüllt.
Ich will in der aufgeklappten Dropdown-Liste der CB mit dem Mausrad scrollen.
Diese Thema wurde bereits mehrfach in den Fachforen behandelt, allerdings fand ich nirgends eine für mich passende Lösung.
Ich weiß das ist mit Excel-Bordmitteln nur mit einigem Aufwand möglich.
Nach Recherche im Nettz fand ich ein Beispiel bezgl Scrollen in Listbox und Combobox: http://www.office-loesung.de/ftopic174250_0_0_asc.php
Trotz Anpassung der Namen von UF und CB funktioniert das Scrollen mit Mausrad (unter Excel 2007 und Excel 2019) nicht.
Ich habe testweise an allen hierfür erforderlichen Prozeduren einen Haltepunkt gesetzt, aber keine Prozedur wurde bei Betätigung des Mausrads -bei aufgeklappter Dropdownliste- aktiviert; erkennt jemand einen Fehler?
mfG
reiner

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Scrollen in CB mit Mausrad
28.05.2021 17:48:17
Mister
Moin,
der Debugger zeigt einen Fehler in der Function WinProc
In der UF gibt es keinen "MouseWheel"
Gruß Martin
AW: Scrollen in CB mit Mausrad
28.05.2021 17:55:24
reiner
hallo Martin,
danke für die Rückmeldung
hast du eine Idee wie eine Prozedur mit "MouseWheel" in der UF aufgebaut sein muss?
reiner
AW: Scrollen in CB mit Mausrad
28.05.2021 19:37:03
reiner
Userbild
Userbild
Hallo Nepumuk leider gibt es sowohl unter Excel 2007 als auch unter Excel 2019 Probleme.
Ich vermute dass die ApI-Programmierung nur unter Excel 2019 lauffähig ist; ist das richtig? Wenn es nur unter Excel 2019 funktioniert ist OK
Beim Befüllen der CB erscheint die Fehlermeldung "Laufzeitfehler 1004"; kannst du bitte noch einmal schauen wo das Problem liegt
danke
reiner
Anzeige
AW: Scrollen in CB mit Mausrad
28.05.2021 19:41:41
Nepumuk
Hallo reiner,
für 2007 habe ich keine Lösung.
Die Mappe läuft bei mir unter Office 365.
Gruß
Nepumuk
AW: Scrollen in CB mit Mausrad
28.05.2021 19:44:48
reiner
scheinbar gibt es Unterschiede zwischen Office 365 und Excel 2019
ich denke wir brechen hier ab, es erscheint mir doch zu aufwändig
Vielen Dank für deine Beiträge
reienr
AW: Scrollen in CB mit Mausrad
28.05.2021 19:59:16
Nepumuk
Hallo reiner,
hier eine Version die unter Excel 2007 laufen sollte, aber ohne Garantie:
Code:

[Cc][+][-]

Option Explicit Option Private Module Private Declare Function GetWindowLongA Lib "user32.dll" ( _ ByVal hwnd As Long, _ ByVal nIndex As Long) As Long Private Declare Function WindowFromPoint Lib "user32.dll" ( _ ByVal xPoint As Long, _ ByVal yPoint As Long) As Long Private Declare Sub RtlMoveMemory Lib "kernel32.dll" ( _ ByRef Destination As Any, _ ByRef Source As Any, _ ByVal Length As Long) Private Declare Function SetWindowsHookExA Lib "user32.dll" ( _ ByVal idHook As Long, _ ByVal lpfn As Long, _ ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long Private Declare Function CallNextHookEx Lib "user32.dll" ( _ ByVal hHook As Long, _ ByVal ncode As Long, _ ByVal wParam As Long, _ ByRef lParam As Any) As Long Private Declare Function UnhookWindowsHookEx Lib "user32.dll" ( _ ByVal hHook As Long) As Long Private Declare Function GetCursorPos Lib "user32.dll" ( _ ByRef lpPoint As POINTAPI) As Long Private Declare Function GetKeyState Lib "user32.dll" ( _ ByVal nVirtKey As Long) As Integer Private Declare Function PostMessageA Lib "user32.dll" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Private Type POINTAPI X As Long Y As Long End Type Private Type MOUSEHOOKSTRUCT pt As POINTAPI hwnd As Long wHitTestCode As Long dwExtraInfo As Long End Type Private Const WH_MOUSE_LL As Long = 14& Private Const WM_MOUSEWHEEL As Long = &H20A Private Const HC_ACTION As Long = 0& Private Const GWL_HINSTANCE As Long = -6& Private Const WM_KEYDOWN As Long = &H100 Private llngMouseHook As Long Private llngControlHwnd As Long Private llngPage As Long Private lblnHook As Boolean Private lobjScrollObject As Object Public Sub HookMouse(ByRef probjScrollObject As Object, Optional ByVal opvlngPage As Long) Dim lngHinstance As Long Dim lngHwndUnderCursor As Long Dim udtPoint As POINTAPI llngPage = opvlngPage Call GetCursorPos(udtPoint) lngHwndUnderCursor = WindowFromPoint(udtPoint.X, udtPoint.Y) If llngControlHwnd <> lngHwndUnderCursor Then Call UnhookMouse Set lobjScrollObject = probjScrollObject llngControlHwnd = lngHwndUnderCursor lngHinstance = GetWindowLongA(llngControlHwnd, GWL_HINSTANCE) If Not lblnHook Then llngMouseHook = SetWindowsHookExA(WH_MOUSE_LL, AddressOf MouseProc, lngHinstance, 0&) lblnHook = llngMouseHook <> 0 End If End If End Sub Public Sub UnhookMouse() If lblnHook Then Call UnhookWindowsHookEx(llngMouseHook) Set lobjScrollObject = Nothing llngMouseHook = 0 llngControlHwnd = 0 lblnHook = False End If End Sub Private Function MouseProc(ByVal pvlngCode As Long, ByVal pvlngParam As Long, ByRef prudtParam As MOUSEHOOKSTRUCT) _ As Long Dim lngHwndUnderCursor As Long On Error GoTo err_exit If pvlngCode = HC_ACTION Then lngHwndUnderCursor = WindowFromPoint(prudtParam.pt.X, prudtParam.pt.Y) If lngHwndUnderCursor = llngControlHwnd Then If pvlngParam = WM_MOUSEWHEEL Then If TypeOf lobjScrollObject Is MSForms.ListBox Or TypeOf lobjScrollObject Is MSForms.ComboBox Then With lobjScrollObject If GetKeyState(vbKeyControl) >= 0 Then If prudtParam.hwnd > 0 Then If .TopIndex > 0 Then If .TopIndex > 3 Then .TopIndex = .TopIndex - 3 Else .TopIndex = 0 End If End If Else .TopIndex = .TopIndex + 3 End If Else If TypeOf lobjScrollObject Is MSForms.ListBox Then If prudtParam.hwnd > 0 Then Call PostMessageA(llngControlHwnd, WM_KEYDOWN, vbKeyLeft, 0) Else Call PostMessageA(llngControlHwnd, WM_KEYDOWN, vbKeyRight, 0) End If End If End If End With ElseIf TypeOf lobjScrollObject Is MSForms.MultiPage Then With lobjScrollObject.Pages(llngPage) If GetKeyState(vbKeyControl) >= 0 Then If prudtParam.hwnd > 0 Then If .ScrollTop > 0 Then .ScrollTop = .ScrollTop - 30 Else .ScrollTop = 0 End If Else .ScrollTop = .ScrollTop + 30 End If Else If prudtParam.hwnd > 0 Then If .ScrollLeft > 0 Then .ScrollLeft = .ScrollLeft - 30 Else .ScrollLeft = 0 End If Else .ScrollLeft = .ScrollLeft + 30 End If End If End With ElseIf TypeOf lobjScrollObject Is MSForms.UserForm Or TypeOf lobjScrollObject Is MSForms.Frame Then With lobjScrollObject If GetKeyState(vbKeyControl) >= 0 Then If prudtParam.hwnd > 0 Then If .ScrollTop > 0 Then .ScrollTop = .ScrollTop - 30 Else .ScrollTop = 0 End If Else .ScrollTop = .ScrollTop + 30 End If Else If prudtParam.hwnd > 0 Then If .ScrollLeft > 0 Then .ScrollLeft = .ScrollLeft - 30 Else .ScrollLeft = 0 End If Else .ScrollLeft = .ScrollLeft + 30 End If End If End With End If Exit Function End If Else Call UnhookMouse End If End If MouseProc = CallNextHookEx(llngMouseHook, pvlngCode, pvlngParam, ByVal prudtParam) Exit Function err_exit: Call UnhookMouse End Function

Gruß
Neoumuk
Anzeige
Bitte ein BIT (oder gleich ne ganze Kiste)
28.05.2021 20:07:56
Daniel
Spielt bei Verwendung von API nicht auch die Frage, ob 32- oder 64-Bit Version eine Rolle?
Habt ihr das mal abgecheckt?
Gruß Daniel
AW: Bitte ein BIT (oder gleich ne ganze Kiste)
28.05.2021 20:20:06
reiner
bei mir läuft Excel 2007 / 2019 jeweils als 32-bit-Version
AW: Scrollen in CB mit Mausrad
28.05.2021 20:18:52
reiner
ich habe den Code in ein Modul eingefügt aber leider funktioniert es unter Excel 2007 nicht, schade
lass gut sein
Nepumuk
AW: Scrollen in CB mit Mausrad
28.05.2021 19:40:00
reiner
Userbild
Diese Fehlermeldung habe vergessen hochzuladen

17 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige