3

我希望此工作簿的活动窗口位于活动显示的左上角。这适用于一台显示器,但不适用于我的 6 显示器配置(一个视频卡)。

我的显示器设置的图片
在此处输入图像描述

我将活动的 Excel 窗口一次放在每个显示器上,然后运行以下代码:

Sub Display_WinAnchor()
    ActiveWindow.WindowState = xlNormal
    ActiveWindow.Left = 0
End Sub

监视器 1、3、4、5 是纵向的。
当代码在监视器 3 和 5 上运行时,窗口移动到监视器 3 的左侧。
当代码在监视器 1 和 4 上运行时,窗口移动到监视器 1 的左侧。

监视器 2,6 面向横向。
当代码在监视器 2 和 6 上运行时,活动 Excel 窗口在上半部分,窗口移动到监视器 3 的左侧。
当代码在监视器 2 和 6 上运行时,活动 Excel 窗口在下半部分,窗口移动到监视器 1 的左侧。

我不使用显示平铺,我只是在 Windows 10 显示设置中扩展显示。而且这似乎不是主要的监视器问题。

我可以通过在这里找到的代码获取所有配置信息 - https://wellsr.com/vba/2019/excel/calculate-screen-size-and-other-display-details-with-vba/

我在代码中添加了以下案例:

Case "monitors" 'Number of Monitors
    Result = GetSystemMetrics(SM_CMONITORS)

Case "displaynum" 'Display Device Number
    Result = hMonitor
        
Case "windownum" 'Active Window Number
    Result = hwnd

现在,如果我运行这段代码......

Sub Display_GetSpecs()
   
Debug.Print "Number Of Monitors ="; Screen("monitors")
Debug.Print "Name Of Display = "; Screen("displayname")
Debug.Print "Display Device Number ="; Screen("displaynum")
Debug.Print "Active Window Number ="; Screen("windownum")
Debug.Print "Display Horz PIXEL ="; Screen("pixelsx")
Debug.Print "Display Vert PIXEL ="; Screen("pixelsy")
Debug.Print "Display Horz INCHES ="; Screen("inchesx")
Debug.Print "Display Vert INCHES ="; Screen("inchesy")
Debug.Print "Display Horz POINTS ="; Screen("inchesx") * 72
Debug.Print "Display Vert POINTS ="; Screen("inchesy") * 72

End Sub

我得到这些结果...

监视器数量 = 6

显示名称 = \.\DISPLAY4

显示设备编号 = 65545

活动窗口编号 = 526414

显示水平像素 = 1440

显示垂直像素 = 2560

显示水平英寸 = 13.3858267716535

显示垂直英寸 = 23.6220472440945

显示水平点 = 963.779527559055

显示垂直点 = 1700.7874015748

注意...“显示名称”与 Windows 10 显示设置显示的内容不匹配。不知道为什么,但不确定我需要它来解决我的问题。我最感兴趣的是“显示设备编号= 65545”

有没有办法通过代码让 ActiveWindow.Left 为特定显示器工作?在此示例中,“显示设备编号 = 65545”。

4

0 回答 0