Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
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

Makro per Shortcut bei minimiertem Fenst

Makro per Shortcut bei minimiertem Fenst
22.12.2022 17:35:07
Eric
Ich habe aus diesem Forumsbeitrag den Code genommen, um ein Makro mit einem Tastatur Shortcut zu starten, auch wenn Excel gerade nur im Hintergrund ausgeführt wird: https://chandoo.org/forum/threads/running-macro-with-excel-minimised-in-background-not-active.29466/
Dort kann ich leider nicht posten, deshalb hoffe ich auf Hilfe hier.
Ich habe den Code in mein Projekt integriert, hier eine Beispieldatei ohne anderen Code:
https://www.herber.de/bbs/user/156899.xlsm
Der eigentliche Zweck funktioniert. Beim Öffnen des Worbooks wird der Code gestartet, eine MsgBox zeigt es mir an. Drücke ich auf der Tastatur nun Alt+L, erscheint eine andere MsgBox, um anzuzeigen, dass das Shortcut erkannt wurde. Das funktioniert auch bei minimiertem Excel.
Problem: läuft der Code, kann ich keine anderen Excel Dateien mehr öffnen. Der Code scheint das zu unterdrücken. Der grüne Excel-Startscreen bleibt auch auf "Öffnen [Dateiname] 100%", bis eine MsgBox öffnet (an meiner Beispieldatei nur sichtbar, wenn man die MsgBox im Sub Workbook_Open auskommentiert.
Hat jemand eine Idee, wie man das Problem beheben kann? Erkennt jemand den Fehler?
Der Code:

Option Explicit
'API für Shortcut
Private Type POINTAPI
x As Long
y As Long
End Type
#If VBA7 Then
Private Type MSG
hWnd As LongPtr
message As Long
wParam As LongPtr
lParam As LongPtr
time As Long
pt As POINTAPI
End Type
Private Declare PtrSafe Function RegisterHotKey Lib "user32" (ByVal hWnd As LongPtr, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare PtrSafe Function UnregisterHotKey Lib "user32" (ByVal hWnd As LongPtr, ByVal id As Long) As Long
Private Declare PtrSafe Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As MSG, ByVal hWnd As LongPtr, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Declare PtrSafe Function WaitMessage Lib "user32" () As Long
#Else
Private Type MSG
hWnd As Long
message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type
Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long) As Long
Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As MSG, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long
#End If
Private Const MOD_ALT = &H1
Private Const MOD_CONTROL = &H2
Private Const MOD_SHIFT = &H4
Private Const PM_REMOVE = &H1
Private Const WM_HOTKEY = &H312
Public message As String
Public bCancel As Boolean   '============================================================
''''''''''''''''''' Code Shortcut ende
Sub Workbook_Open()
'Hook the keys combination.
bCancel = False
MsgBox "gestartet"
Call RegisterHotKey(Application.hWnd, &HBFFF&, MOD_ALT, vbKeyL)
'Application.Wait Now + #12:00:10 AM#
Call Key_Listener
End Sub
'Code für Shortcut
Sub Key_Listener()
'Dim message As MSG
Dim message As MSG
On Error GoTo Oops
Do While Not bCancel
WaitMessage
If PeekMessage(message, Application.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
'Comment out this line if you don't wish to activate excel.
VBA.AppActivate Application.Caption
Select Case message.wParam
Case &HBFFF&
Application.WindowState = xlMaximized
MsgBox "yo"
End Select
End If
DoEvents
Loop
Oops:
Call UnregisterHotKey(Application.hWnd, &HBFFF&)
Call UnregisterHotKey(Application.hWnd, &HBFFE&)
End Sub
' gheört auch zu Shortcut
Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
bCancel = True
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro per Shortcut bei minimiertem Fenst
23.12.2022 19:24:20
onur
Crossposting: https://www.vba-forum.de/View.aspx?ziel=78685-Makro_hindert_andere_Dateien_am_%C3%96ffnen
Wie kommst du darauf, dass bCancel jemals verändert werden würde? Sie ist doch nicht mal "Public" deklariert.
Und was soll dieser Quatsch hier ?

Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
bCancel = True
End Sub
Was für eine Userform denn ? Du hast KEINE:
AW: Makro per Shortcut bei minimiertem Fenst
23.12.2022 22:34:25
Eric
Okay, my bad. In der Originalen Datei (das hier ja nur als Beispiel, da es sonst hunderte zeilen Code gewesen wären) gibt es natürlich ein Userform, über das alles gemacht wird. Soll das geschlossen werden, soll der Code stoppen, um die Excel datei zu schließen. Hätte hier im Beispiel natürlich auch ein Userform einbauen sollen.
Anzeige
AW: Makro per Shortcut bei minimiertem Fenst
24.12.2022 05:19:59
onur
DAS bleibt trotzdem:
"Wie kommst du darauf, dass bCancel jemals verändert werden würde? Sie ist doch nicht mal "Public" deklariert."
AW: Makro per Shortcut bei minimiertem Fenst
25.12.2022 20:18:32
Eric
Verstehe die Aussage nicht ganz bcancel ist doch als Public deklariert
AW: Makro per Shortcut bei minimiertem Fenst
25.12.2022 21:38:21
onur
Wenn du eine Variable NICHT in einem Standardmodul (Weder Sheet noch Workbook oder Userform) public deklarierst, ist sie nicht wirklich public, da das dann nur gültig ist in dem Modul (Sheet noch Workbook oder Userform), indem du sie public deklarierst.
Nur eine Variable, die in einem Standardmodul als public deklariert wurde, gilt in ALLEN Modulen.
Einer mit "VBA-gut" sollte sowas doch wissen.
Anzeige
AW: Makro per Shortcut bei minimiertem Fenst
25.12.2022 21:45:37
Eric
Sorry, das war mir tatsächlich neu.
Aber der Ton dürfte gern etwas freundlicher sein :)
AW: Makro per Shortcut bei minimiertem Fenst
25.12.2022 21:50:10
onur
Dito! Gern geschehen !!!
AW: Makro per Shortcut bei minimiertem Fenst
23.12.2022 19:27:16
onur
Do While Not bCancel
Da bCancel sich nie ändern kann, hängt dein "Code" in der Endlosschleife fest.
AW: Makro per Shortcut bei minimiertem Fenst
25.12.2022 20:16:58
Eric
Ein Stück weit, soll er ja in der Schleife bleiben, damit auch der Shortcut immer erkannt werden kann. Irgendeine Idee, wie man den Code so anpassen kann, dass er kurz pausiert und ein öffnen einer Datei zulässt und anschließend wieder startet? Wait hilft nichts, weil der Code ja trotzdem läuft...

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige