Hallo Hermann,
hier eine Variante, in der die Persönliche Arbeitsmappe verwendet wird.
Darin muss ein Klassenmodul und ein normales Modul eingefügt werden.
Solltest Du noch keine Pers.Arbeitsmappe haben, zeichne einfach ein
Makro auf und gib als Speicherort die P.A. an. Die Aufzeichnung kannst
Du dann sofort wieder beenden. Dann hast Du auch schon ein allgemeines
Modul drin. Damit es dann auch klappt, muss Excel komplett beendet werden.
Die Fensterangaben werden dann jeweils in der entsprechenden Arbeitsmappe
unter benutzerdefininierte Eigenschaften abgespeichert und abgefragt.
Hier die Codes:
Code:
' **************************************************************
' Modul: DieseArbeitsmappe Typ = Element der Mappe(Sheet, Workbook, ...)
' **************************************************************
Option Explicit
Dim oKlasseExcel As clsExcelApp
Private Sub Workbook_Open()
Set oKlasseExcel = New clsExcelApp
Set oKlasseExcel.ExcelWatch = Application
End Sub
' **************************************************************
' Modul: clsExcelApp Typ = Klassenmodul
' **************************************************************
Option Explicit
Public WithEvents ExcelWatch As Application
Private Sub ExcelWatch_WorkbookActivate(ByVal Wb As Workbook)
FenstereinstellungenSetzenSpeichern Wb, "Setzen"
End Sub
Private Sub ExcelWatch_WorkbookDeactivate(ByVal Wb As Workbook)
FenstereinstellungenSetzenSpeichern Wb, "Speichern"
End Sub
' **************************************************************
' Modul: m_Fenstereinstellungen Typ = Allgemeines Modul
' **************************************************************
Option Explicit
Sub FenstereinstellungenSetzenSpeichern(oWb As Workbook, strVorgang As String)
Dim oProp As DocumentProperty
Dim Fenster_L As DocumentProperty
Dim Fenster_T As DocumentProperty
Dim Fenster_H As DocumentProperty
Dim Fenster_W As DocumentProperty
Dim Fenster_S As DocumentProperty
For Each oProp In oWb.CustomDocumentProperties
If oProp.Name = "Fenster_L" Then Set Fenster_L = oProp
If oProp.Name = "Fenster_T" Then Set Fenster_T = oProp
If oProp.Name = "Fenster_H" Then Set Fenster_H = oProp
If oProp.Name = "Fenster_W" Then Set Fenster_W = oProp
If oProp.Name = "Fenster_S" Then Set Fenster_S = oProp
Next oProp
Select Case strVorgang
Case "Speichern"
If Fenster_L Is Nothing Then
oWb.CustomDocumentProperties.Add "Fenster_L", 0, 1, Application.Left
Else
Fenster_L.Value = Application.Left
End If
If Fenster_T Is Nothing Then
oWb.CustomDocumentProperties.Add "Fenster_T", 0, 1, Application.Top
Else
Fenster_T.Value = Application.Top
End If
If Fenster_H Is Nothing Then
oWb.CustomDocumentProperties.Add "Fenster_H", 0, 1, Application.Height
Else
Fenster_H.Value = Application.Height
End If
If Fenster_W Is Nothing Then
oWb.CustomDocumentProperties.Add "Fenster_W", 0, 1, Application.Width
Else
Fenster_W.Value = Application.Width
End If
If Fenster_S Is Nothing Then
oWb.CustomDocumentProperties.Add "Fenster_S", 0, 1, Application.WindowState
Else
Fenster_S.Value = Application.WindowState
End If
Case "Setzen"
If Not Fenster_S Is Nothing Then
Application.WindowState = Fenster_S
If Fenster_S = -4143 Then
If Not Fenster_L Is Nothing Then Application.Left = Fenster_L.Value
If Not Fenster_T Is Nothing Then Application.Top = Fenster_T.Value
If Not Fenster_H Is Nothing Then Application.Height = Fenster_H.Value
If Not Fenster_W Is Nothing Then Application.Width = Fenster_W.Value
End If
End If
End Select
End Sub
Gruß Uwe