Herbers Excel-Forum - das Archiv
Excel nicht über das rote X beenden
Betrifft: Excel nicht über das rote X beenden
von: Robert
Geschrieben am: 05.01.2007 19:07:37
Hallo,
gibt es eine Möglichkeit, es zu verhindern dass Excel über das obligatorische Rote Kreuz geschlossen werden kann???
Gruß
Robert
Betrifft: Nimm Windows 95...
von: EtoPHG
Geschrieben am: 05.01.2007 19:15:25
dort ist das Kreuz nicht rot!
Nein, im Ernst...
Excel gut - VBA gut
http://www.google.ch/search?q=Schliessen+X+verhindern+site:www.herber.de&hl=de&lr=&as_qdr=all&filter=0
Gruss Hansueli
Betrifft: AW: Excel nicht über das rote X beenden
von: Ramses
Geschrieben am: 05.01.2007 19:15:32
Hallo
Das EXCEL-Systemmenü global abzusetzen geht meines Wissens nach nicht.
Aber du kannst das Arbeitsmappenbezogen herstellen
Probier mal.
Der ganze Code in ein Modul deiner Arbeitsmappe
Option Explicit
'Begin der Funktion
Public Const GWL_STYLE = (-16)
Public Const WS_SYSMENU = &H80000
'---
Declare
Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare
Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare
Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare
Function DrawMenuBar Lib "User32" (ByVal hWnd As Long) As Long
Sub Hide_SYSMENU()
Dim xl_hwnd, lStyle
xl_hwnd = FindWindow("xlmain", vbNullString)
If xl_hwnd <> 0 Then
lStyle = GetWindowLong(xl_hwnd, GWL_STYLE)
lStyle = SetWindowLong(xl_hwnd, GWL_STYLE, lStyle And Not WS_SYSMENU)
DrawMenuBar xl_hwnd
End If
End Sub
Sub Show_SYSMENU()
Dim xl_hwnd, lStyle
xl_hwnd = FindWindow("xlmain", vbNullString)
If xl_hwnd <> 0 Then
lStyle = GetWindowLong(xl_hwnd, GWL_STYLE)
lStyle = SetWindowLong(xl_hwnd, GWL_STYLE, lStyle Or WS_SYSMENU)
DrawMenuBar xl_hwnd
End If
End Sub
Aus dem Workbook_Open Ereignis das "Hide_SYSMENU" aufrufen, und im Workbook_BeforeClose Ereignis das Show_SYSMENU aufrufen.
Gruss Rainer

 |
Betrifft: AW: Excel nicht über das rote X beenden
von: Franc
Geschrieben am: 05.01.2007 19:42:14
und noch eine einfache Variante mit wenig zeilen wo excel nie wieder zu geht. (ausser über Taskmanager) ^^
Code in die DieseArbeitsmappe kopieren (NICHT in ein Modul oder Tabelle)
Wenn es doch mal zugehen soll, empfiehlt es sich ein Ausweg zu lassen zum Beispiel anstatt nur Cancel = True eine Abfrage/Hintertürchen zu lassen.
zum Beispiel (ein x in Zelle A1 und du kannst das Teil schließen)
If [A1] <> "x" Then Cancel = True
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = True
End Sub