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

Excel Mappe beenden

Excel Mappe beenden
05.04.2023 18:11:12
wolfgang

Guten Abend,
ich habe dieses Makro gefunden:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = True
End Sub

damit wird das Schließen über Kreuz oben rechts verhindert.
Allerdings kann ich jetzt meine Datei (über ein Button) auch nicht schließen. warum ?

würde mich freuen, wenn mir jemand einen Tipp gibt.
gruß wolfgang

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

Betreff
Datum
Anwender
Anzeige
AW: Excel Mappe beenden
05.04.2023 18:48:45
RPP63
Schmeiße das Makro einfach raus!
Schließlich macht es exakt das, was Du "bemängelst"!
Außerdem kommt mir das Problem sehr bekannt vor …
Habe ich Dir nicht geraten, eine globale Boolean-Variable zu setzen und als Parameter zu übergeben?


Habe eine Lösung ! -)
05.04.2023 18:53:33
wolfgang
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not bolbeenden Then
        MsgBox "Schließen Schaltfläche benutzen !", 48, "Hinweis"
        bolbeenden = True
        Cancel = True
    End If
End Sub
'Public bolClose As Boolean
'im Modul: mod_alle_Muster

Public bolbeenden As Boolean '--- gehört zu schließen
Public Sub schliessen()
    bolbeenden = True
    If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End Sub
schönen Abend noch
gr wolfgang


Anzeige
klappt doch nicht...
05.04.2023 18:57:02
wolfgang
Guten Abend,
klappt nur wenn ich die Datei neu gestartet habe,
sonst nicht.

gr wolfgang


AW: Excel Mappe beenden
05.04.2023 18:58:27
wolfgang
hallo,
"Außerdem kommt mir das Problem sehr bekannt vor " ich habe leider nichts gefunden, was ich gebrauchen könnte !

gr wolfgang


AW: Excel Mappe beenden
05.04.2023 21:43:05
volti
Hallo Wolfgang,

hier noch eine, wenn auch etwas aufwändigere, Idee, wie Du den Click auf das Systemkreuz abfangen kannst und damit u.a. das Schließen der Mappe verhindern kannst. Der Code kommt ins Modul DieseArbeitsmappe
Probiere es hat mal aus....

Code:


Private Declare PtrSafe Function GetWindowRect Lib "user32" ( _ ByVal hwnd As LongPtr, lpRect As RECT) As Long Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Declare PtrSafe Function ScreenToClient Lib "user32" ( _ ByVal hwnd As LongPtr, lpPoint As POINTAPI) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Type POINTAPI x As Long y As Long End Type Function CheckSystemkreuzClick() As Boolean Dim PT As POINTAPI, R As RECT GetCursorPos PT ' Mausposition holen ScreenToClient Application.hwnd, PT ' Koordinaten umrechnen auf Fenster GetWindowRect Application.hwnd, R ' Maße des Fensters holen If PT.x < R.Right And PT.x > (R.Right - 68) And _ PT.y > R.Top And PT.y < R.Top + 50 Then CheckSystemkreuzClick = True End Function Private Sub Workbook_BeforeClose(Cancel As Boolean) If CheckSystemkreuzClick Then MsgBox "Bitte nicht über das Systemkreuz beenden!", vbExclamation Cancel = True: Exit Sub End If End Sub

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



Anzeige
Super Karl-Heinz -)
06.04.2023 10:19:50
wolfgang
Guten Morgen Karl-Heinz,
Spitze es klappt einwandfrei !

Schöne Ostertage !
gruß wolfgang


Kleine Nachfrage
06.04.2023 10:31:30
wolfgang
Hallo Karl-Heinz,
könnte man diese Anwendung auch für eine WORD Datei nutzen ?

mfg wolfgang


AW: Kleine Nachfrage
06.04.2023 11:53:09
Volti
Ja, das sollte gehen...
Isr ja API und VBA


AW: Kleine Nachfrage
06.04.2023 12:09:52
wolfgang
Hallo,
brauch also nichts verändern ?
gr wolfgang


AW: Kleine Nachfrage
06.04.2023 14:22:13
volti
Hallo Wolfgang,

zugegebener Weise habe ich kaum Ahnung von Word, weil ich außer Schreiben fast nichts damit mache. Trotzdem habe ich mich aus Eigeninteresse mal daran gemacht Deinen Wunsch umzusetzen.

Leider läuft das nicht so wie bei Excel, weil
  • Application.hwnd fehlt und damit das Word-Handle anderweitig ermittelt werden muss
  • Es kein Event BeforeClose gibt, und damit kein Abbruch über Cancel gemacht werden kann.
Also habe ich es über eine Klassenprogrammierung probiert und bei mir klappt es jetzt. Probiere es einfach mal aus.
Falls jemand anderes Tipps zur Wordklassenprogrammierung für diesen Fall hat, =>her damit.

Code:


' ##### in ThisDocument ##### Dim X As New clsWord Sub Document_Open() Set X.appWord = Word.Application End Sub ' ##### In ein Klassenmodul mit Namen clsWord ##### Public WithEvents appWord As Word.Application Private Declare PtrSafe Function GetWindowRect Lib "user32" ( _ ByVal hWnd As LongPtr, lpRect As RECT) As Long Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Declare PtrSafe Function ScreenToClient Lib "user32" ( _ ByVal hWnd As LongPtr, lpPoint As POINTAPI) As Long Private Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Type POINTAPI X As Long y As Long End Type Private Sub appWord_DocumentBeforeClose(ByVal Doc As Document, Cancel As Boolean) Dim PT As POINTAPI, R As RECT GetCursorPos PT ' Mausposition holen ScreenToClient GetActiveWindow, PT ' Koordinaten umrechnen auf Fenster GetWindowRect GetActiveWindow, R ' Maße des Fensters holen If PT.X < R.Right And PT.X > (R.Right - 68) And _ PT.y > R.Top And PT.y < R.Top + 50 Then MsgBox "Bitte nicht über das Systemkreuz beenden!", vbExclamation Cancel = True: Exit Sub End If End Sub

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



Anzeige
Zur Info
07.04.2023 16:23:16
wolfgang
Hallo Karl-Heinz,
leider Komibiliationsprobleme.
gr wolfgang

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige