Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Windows.Arrange

Forumthread: Windows.Arrange

Windows.Arrange
14.02.2021 18:01:04
Jerry
Liebe Community,
Ich möchte am Ende einer Prozedur 2 Arbeitsmappen nebeneinander vertikal, je zur Hälfte geteilt am
Bildschirm anzeigen lassen.
Wichtig: Es sind aber MEHR als diese 2 Arbeitsmappen geöffnet.
Ich weise aus der 1 Mappe an:
Windows.CompareSideBySideWith "Name.xlsm"
Windows.BreakSideBySide
Application.Windows.Arrange ArrangeStyle:=xlArrangeStyleVertical
Es werden mir aber jedes Mal ALLE geöffneten Mappen vertikal angeordnet, selbst wenn ich
die Mappen, die nicht mitspielen sollen, vorher AUSblende.
Ich tue mir wirklich schwer die Windows-Ebene anzusprechen, weil hier im Gegenzug zur Workbooks-Ebene
andere Anweisungen sind.
Vielen, vielen Dank für Eure Hilfe,
Jerry
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Windows.Arrange
14.02.2021 18:53:45
Nepumuk
Hallo Jerry,
teste mal:
Option Explicit

Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByRef lpRect As RECT) As Long
Private Declare PtrSafe Function GetSystemMetrics Lib "user32.dll" ( _
    ByVal nIndex As Long) As Long
Private Declare PtrSafe Function GetDesktopWindow Lib "user32.dll" () As LongPtr
Private Declare PtrSafe Function GetDC Lib "user32.dll" ( _
    ByVal hwnd As LongPtr) As LongPtr
Private Declare PtrSafe Function ReleaseDC Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal hdc As LongPtr) As Long
Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32.dll" ( _
    ByVal hdc As LongPtr, _
    ByVal nIndex As Long) As Long

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Const SM_CXSCREEN As Long = 0&
Private Const SM_CYSCREEN As Long = 1&

Private Const LOGPIXELS_X As Long = 88&
Private Const LOGPIXELS_Y As Long = 90&

Private Const GC_CLASSNAMETASKBAR As String = "Shell_TrayWnd"

Public Sub ArrangeWindows()
    
    Dim sngWidth As Single, sngHeight As Single
    Dim lngptrHwnd As LongPtr
    Dim udtRectangle As RECT
    
    sngWidth = GetResolution(LOGPIXELS_X)
    sngHeight = GetResolution(LOGPIXELS_Y)
    
    lngptrHwnd = FindWindowA(GC_CLASSNAMETASKBAR, vbNullString)
    
    Call GetWindowRect(lngptrHwnd, udtRectangle)
    
    'Linkes Fenster
    With Workbooks("Mappe1.xlsm").Windows(1) 'Anpassen !!!
        
        .WindowState = xlNormal
        
        .Top = 0
        .Left = 0
        .Width = GetSystemMetrics(SM_CXSCREEN) * sngWidth / 2
        .Height = (GetSystemMetrics(SM_CYSCREEN) - _
            (udtRectangle.Bottom - udtRectangle.Top)) * sngHeight
        
    End With
    
    'Rechtes Fenster
    With Workbooks("Mappe2.xlsm").Windows(1) 'Anpassen !!!
        
        .WindowState = xlNormal
        
        .Top = 0
        .Left = GetSystemMetrics(SM_CXSCREEN) * sngWidth / 2
        .Width = GetSystemMetrics(SM_CXSCREEN) * sngWidth / 2
        .Height = (GetSystemMetrics(SM_CYSCREEN) - _
            (udtRectangle.Bottom - udtRectangle.Top)) * sngHeight
        
    End With
End Sub

Private Function GetResolution(ByVal pvlngLogPixel As Long) As Single
    
    Dim lngptrhWndDesk As LongPtr, lngptrhDCDesk As LongPtr
    Dim lnglogPixel As Long
    
    lngptrhWndDesk = GetDesktopWindow()
    lngptrhDCDesk = GetDC(lngptrhWndDesk)
    
    lnglogPixel = GetDeviceCaps(lngptrhDCDesk, pvlngLogPixel)
    
    Call ReleaseDC(lngptrhWndDesk, lngptrhDCDesk)
    
    GetResolution = 72 / lnglogPixel
    
End Function

Gruß
Nepumuk
Anzeige
AW: Windows.Arrange
14.02.2021 20:37:43
Jerry
Wow, Nepumuk!!!
Besser gehts nicht!!!
Bin heute 8 Stunden frustriert darüber gesessen.......
Vielen Dank,
Gruß
Jerry
AW: Windows.Arrange
15.02.2021 08:00:10
Jerry
Hallo Nepumuk,
Ich habe eine Frage an Dich bitte, die über die Kommunikation im Forum hinausgeht.
Würdest Du mir bitte Deine Email-Adresse geben, damit ich Dich direkt ansprechen kann.
Vielen Dank,
Jerry
Anzeige
AW: Windows.Arrange
15.02.2021 08:04:16
Nepumuk
Hallo Jerry,
Gruß
Nepumuk
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige