Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1872to1876
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
Inhaltsverzeichnis

Usetrfor 1&2 per Maustaste öffnen

Usetrfor 1&2 per Maustaste öffnen
06.03.2022 19:53:01
Chris
Hallo Forum,
ich habe 2 Userforms.
Userform1 soll geöffnet werden, wenn man die linke Maustaste betätigt.
Userform2 soll geöffnet werden, wenn man die rechte Maustaste betätigt.
Das Ganze soll passieren, egal wo sich der Mauszeiger auf dem Sheet befindet.
Vielen Dank
Chris

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

Betreff
Datum
Anwender
Anzeige
AW: Usetrfor 1&2 per Maustaste öffnen
06.03.2022 21:50:52
Mullit
Hallo,
Rechtsklick auf Deinen Tab-Reiter >>> Code anzeigen >>> Dann einfügen:

Option Explicit
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Call UserForm2.Show
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call UserForm1.Show
End Sub
Gruß, Mullit
AW: Usetrfor 1&2 per Maustaste öffnen
06.03.2022 22:28:28
Matthias
Hallo Mullit,
Würde ich so nicht machen.
Da beim Worksheet_BeforeRightClick
vorher immer das Worksheet_SelectionChange greift.
Dashalb wird beim Rechtsklick auch Userform1 geladen, dann Userform2 und am Ende auch noch das Kontexmenü.
Ich würde statt Worksheet_SelectionChange den Doppelklick benutzen und das Kontexmenü mit Cancel = TRUE blockieren.
Gruß Matthias
Anzeige
AW: Usetrfor 1&2 per Maustaste öffnen
07.03.2022 12:22:49
Chris
Hallo zusammen,
danke für die Rückmeldung. Das Doppelklick event möchte ich ungerne nutzen. Gibt es sonst eine Möglichkeit?
Gruß
Chris
AW: Usetrfor 1&2 per Maustaste öffnen
07.03.2022 13:17:12
Daniel
Hi
Wenn beim Rechtsklick zuerst das SelectionChange-Event ausgeführt wird und dann erst das beforeRightClick, dann musst du im BRC-Event die Userform1 erst wieder schließen, bevor du die zweite öffnest.
Dass starten des Kontextmenüs verhinderst du mit Cancel = True.
Also folgendes im BRC-Event:

Cancel = True
Unload Userform1
Userform2.Show
Allerdings sollte die Userform1 vom Typ Showmodal = False sein oder mit

Userform1.Show false
Gestartet werden, sonst muss erst der Anwender die Userform schließen.
Gruß Daniel
Anzeige
AW: Usetrfor 1&2 per Maustaste öffnen
07.03.2022 14:39:51
volti
Hallo Chris,
je nachdem, wofür Du das brauchst (z.B. nur die beiden Klicks zulassen) und wieviel Aufwand Du betreiben willst, könntest Du auch eine API-Lösung verwenden.
Bei der u.a. Lösung werden die beiden Mausklicks abgefangen und hier im Beispiel je eine MsgBox angezeigt. Die Originalmausaktivitäten werden geblockt.
Das Mausklicksabfangen muss jedoch z.B. nach Blattwechsel oder Mappenschließung, ggf. auch Mappenwechsel, abgeschaltet werden.
Kannst es ja mal ausprobieren.
Code:


' ############ In ein Modul ############# Option Explicit Private Declare PtrSafe Function SetWindowsHookExA Lib "user32" ( _ ByVal idHook As Long, ByVal lpfn As LongPtr, _ ByVal hmod As LongPtr, ByVal dwThreadId As Long) As LongPtr Private Declare PtrSafe Function CallNextHookEx Lib "user32" ( _ ByVal hHook As LongPtr, ByVal nCode As Long, _ ByVal wParam As LongPtr, lParam As Any) As LongPtr Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" ( _ ByVal hHook As LongPtr) As Long Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Type POINTAPI x As Long y As Long End Type Dim hHook As LongPtr Private Const WH_MOUSE_LL = 14 Private Const WM_LBUTTONDOWN = &H201 Private Const WM_RBUTTONDOWN = &H204 Sub MausAus() UnhookWindowsHookEx hHook: hHook = 0 End Sub Sub MausAn() ' Baut den Mousehook auf If hHook <> 0 Then Exit Sub hHook = SetWindowsHookExA(WH_MOUSE_LL, AddressOf MouseProc, _ Application.HinstancePtr, 0) End Sub Private Function MouseProc(ByVal nCode As Long, ByVal wParam As LongPtr, _ lParam As LongPtr) As LongPtr Dim PT As POINTAPI, oCurObj As Object ' Fängt Mausclicks ab If nCode = 0 Then ' HC_ACTION On Error Resume Next Select Case wParam Case WM_LBUTTONDOWN, WM_RBUTTONDOWN GetCursorPos PT Set oCurObj = ActiveWindow.RangeFromPoint(PT.x, PT.y) If Not oCurObj Is Nothing Then If TypeName(oCurObj) = "Range" Then Call MausAus ' Ggf. Rangebereich einschränken über Intersect und oCurObj.address If wParam = WM_LBUTTONDOWN Then MsgBox "Call Userform1" Else MsgBox "Call Userform2" End If Call MausAn Exit Function End If End If End Select End If MouseProc = CallNextHookEx(0, nCode, wParam, ByVal lParam) End Function '########### In das Tabellenmodul ############# Private Sub Worksheet_Activate() Call MausAn End Sub Private Sub Worksheet_Deactivate() Call MausAus End Sub '########### In DieseArbeitsmappe ############# Private Sub Workbook_BeforeClose(Cancel As Boolean) Call MausAus End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige