我希望此工作簿的活动窗口位于活动显示的左上角。这适用于一台显示器,但不适用于我的 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”。