Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
888to892
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
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Deaktivieren Schließkreuz für einzelnes Blatt

Deaktivieren Schließkreuz für einzelnes Blatt
27.07.2007 19:51:00
Rudi
Hallo zusammen!
Ich habe bislang vergeblich nach einer Lösung für folgendes Problem gesucht:
Das Deaktivieren des Schließkreuzes für ein einzelnes Tabellenblatt in der Ansicht XLNormal.
In meinem Programm wird aufgrund der Spaltenwerte des Tabellenblattes "Liste" ein zweites Fenster geöffnet. In diesem Fenster werden die gefilterten Detaildaten aus dem Tabellenblatt "Details" angezeigt. Das Detailfenster liegt im Vordergrund. Ein Schließen des Tabellenblattes "Liste" soll so lange nicht möglich sein, wie das Detailfenster geöffnet ist.
Im Archiv habe ich bislang nur Lösungen zur Deaktivierung des Schließkreuzes für die Applikation, nicht aber für ein einzelnes Fenster gefunden.
Danke im voraus!

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Deaktivieren Schließkreuz für einzelnes Blatt
27.07.2007 20:02:00
Ramses
Hallo
was verstehst du unter einem "eigenen Fenster" ?
Eine einzelne Tabelle kann nicht in als eigenständiges Fenster geöffnet werden, ausser du erstellst eine neue EXCEL Instanz und dann ist das keine Tabelle sondern eine Mappe..
Zeig mal den Code WIE du die "Tabelle" öffnest.
Gruss Rainer

AW: Deaktivieren Schließkreuz für einzelnes Blatt
27.07.2007 20:15:47
Rudi
Hallo, Rainer!
Der "Basisdatensatz" steht in der der Tabelle "Liste". Durch Doppelclick auf die Zeile wird über
activeWorkbook.newwindow
ein zweites Fenster in der Ansicht XLNormal
mit einigen Einstellungen (Fixierung einer Kopfzeile und Autofilter) geöffnet. Dieses zeigt zunächst die gleiche Tabelle an. Durch
Worksheets("Details").select
ändert sich dies und die zweite Tabelle "Details" wird gezeigt. Beide Fenster verfügen über ein eigenes Schließkreuz und lassen sich unabhängig von einander schließen. Das Schließen des Fensters "Liste" darf aber nicht erfolgen, so lange das Fenster "Details" geöffnet ist.
Gruß -Rudi-

Anzeige
AW: Deaktivieren Schließkreuz für einzelnes Blatt
27.07.2007 20:34:24
Ramses
Hallo
Sorry,... keine Ahnung.
Die Object-Ereignisse "Close", "BeforeClose" usw. werden nicht auf ein zweites Fenster angewandt.
Nur mal eine Frage:
Wozu dann ein zweites Fenster wenn der Anwender die Datei sowieso nicht schliessen darf.
Dann bleib doch in der gleichen Mappe und zeig dem Anwender nur entsprechende Tabelle.
Gruss Rainer

AW: Deaktivieren Schließkreuz für einzelnes Blatt
27.07.2007 21:47:00
Rudi
Hallo, Rainer!
Die Arbeitsmappe steht freigegeben im Netzwerk und wird von mehreren Anwendern gleichzeitig mit Daten gefüllt. Dadurch wird der Datenbestand im "Hauptfenster" ständig erweitert. Das zweite Fenster ist deutlich kleiner als das Hauptfenster und steht im Vordergrund. Es soll die gewünschten Detailinfos bei Bedarf präsentieren, ohne dass der Blick auf das Hauptfenster verloren geht.
Das Problem mit dem Schließkreuz für ein Fenster im Modus XLNormal habe ich aber auch schon für den Fall nicht lösen können, bei dem lediglich ein Fenster geöffnet ist. Der gefundene Code im Herber-Archiv deaktiviert über API das Schließkreuz der Application und nicht das Schließkreuz der Arbeitsmappe.
Gruß -Rudi-

Anzeige
AW: Deaktivieren Schließkreuz für einzelnes Blatt
27.07.2007 22:16:30
Ramses
Hallo
"...und nicht das Schließkreuz der Arbeitsmappe...."
Das ist korrekt, aber das überprüfen ob eine andere Mappe noch offen ist, könntest du so lösen
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'gehört in Hauptmappe
    'geht mit diesem Code natürlich nur,
    'solange diese in der gleichen EXCEL Instanz laufen
    Dim i As Integer
    Dim detailWindow As String
    detailWindow = "DieAndereMappe.xls"
    For i = 1 To Windows.Count
        If Windows(i).Caption = detailWindow Then
            MsgBox "Zuerst das Detailfenter: "" " & detailWindow & " "" schliessen!", vbInformation + vbOKOnly, "Fehler"
            'Abbrechen des Schliessenvorganges
            Cancel = True
            Exit Sub
        End If
    Next i
End Sub

Gruss Rainer

Anzeige
AW: Deaktivieren Schließkreuz für einzelnes Blatt
28.07.2007 12:04:11
Rudi
Hallo, Rainer!
Mit deiner Procedure reagierst du auf das before_close-Ereignis der Arbeitsmappe. Dieses Ereignis wird doch nur ausgelöst, wenn die Mappe geschlossen wird. Dies ist im vorliegenden Fall gerade nicht so. Durch das
ActiveWorkbook.NewWindow
ist ja eine "zweite Sicht" auf das aktuelle Workbook geöffnet. Dadurch wird beim Schließen des "Listen-Fensters" nicht die Arbeitsmappe geschlossen und deshalb auch nicht das Ereignis before-close ausgelöst.
Mit dem Aufruf des zweiten Fensters wird lediglich das Deaktivierungs-Ereignis des worksheets "Liste" (Hauptfenster) ausgelöst. Aktivierungs- und Deaktivierungs-Ereignis des worksheets "Details" werden im NewWindow hingegen nicht ausgelöst. Ich weiss nicht warum dies so ist.
Ich vermute eine Lösung im Bereich der API-Programmierung und werde dort suchen. Bei Erfolg werde ich zu diesem thread berichten.
Vielen Dank -Rudi-

Anzeige
AW: Deaktivieren Schließkreuz für einzelnes Blatt
28.07.2007 12:45:58
Ramses
Hallo
Schön dass du es verstanden hast, aber das habe ich schon oben geschrieben dass dies nicht geht.
Da kannst du auch mit API Programmierung nichts machen, WEIL eben die Klassenereignisse der Mapppe in diesem speziellen Fall nicht ausgelöst werden.
Mein Vorschlag bezog sich auch nur auf den Fall, dass eine andere MAPPE !!! geprüft werden kann, und nicht ein Child-Object.
Du könntest nämlich alternativ die Tabelle "Details" einfach mit
Worksheets("Detail").Copy
als eine andere Mappe öffnen. Damit könntest du dein Problem nämlich dahingehend lösen, dass es dann eben nicht ein "NewWindow" ist, sondern ein anderes Workbook. Dann greifen nämlich die Klassenereignisse wieder.
Gruss Rainer

Anzeige
AW: Deaktivieren Schließkreuz für einzelnes Blatt
28.07.2007 14:43:38
Rudi
Hallo, Rainer!
Ich habe inzwischen einen API-Code gefunden. Er stammt aus dem threat 688847 vom 29.10.2005, 22:54:00 h (Nepumuk, 30.10.2005,10:23.27 h) und soll beim Aktivieren des Workbooks das Ausblenden des Schließkreuzes bewirken:
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************
Option Explicit
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "User32" ( _
ByVal hWnd As Long) As Long
Private Const GWL_STYLE = -&H10
Private Const WS_SYSMENU = &H80000
Private Const gcClassnameMSExcel = "XLMAIN"

Private Sub Workbook_Activate()
Dim lHwnd As Long
lHwnd = FindWindow(gcClassnameMSExcel, Application.Caption)
SetWindowLong lHwnd, GWL_STYLE, GetWindowLong(lHwnd, GWL_STYLE) And Not WS_SYSMENU
DrawMenuBar lHwnd
End Sub



Private Sub Workbook_Deactivate()
Dim lHwnd As Long
lHwnd = FindWindow(gcClassnameMSExcel, Application.Caption)
SetWindowLong lHwnd, GWL_STYLE, GetWindowLong(lHwnd, GWL_STYLE) Or WS_SYSMENU
DrawMenuBar lHwnd
End Sub


Ich habe den Code noch nicht probiert, gehe aber davon aus, dass er läuft.
Mit
SetWindowLong lHwnd, GWL_STYLE, GetWindowLong(lHwnd, GWL_STYLE) And Not WS_SYSMENU
wird das Schließkreuz vermutlich entfernt, wobei ich leider keinen Überblick habe, was sich unter der Adresse WS_SYSMENU = &H80000 konkret verbirgt, bzw. welche Merkmale man sonst noch auf diesem Weg verändern kann....
Damit wäre mein Schließkreuz-Problem gelöst. Für das Schließen der Seite ist dann nur noch eine Schaltfläche im Worksheet erforderlich und ein geordneter Programmabschluss ist möglich.
Gruß -Rudi-

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige