gpt4 book ai didi

excel - 如何使用 Excel VBA 最大化特定显示器上的窗口?

转载 作者:行者123 更新时间:2023-12-02 21:27:04 28 4
gpt4 key购买 nike

我想使用 Excel VBA 在特定屏幕上最大化窗口。

我使用了这段代码:

With ActiveWindow
.WindowState = xlNormal
.Left = 1200
.WindowState = xlMaximized
End With

如果监视器 2 位于监视器 1 的右侧,则该代码有效。如果相反,该方法将失败(然后我必须使用 -1200)。

这个宏应该在不同的电脑上工作,我不知道系统是如何配置的。是否有可能检测连接了多少个显示器并直接寻址我想要最大化窗口的相应显示器?

最佳答案

正如评论中提到的,您需要使用 Windows API;这是另一个(使用起来相对简单)API,可帮助我确定用户表单是否已移出屏幕的可见区域:GetSystemMetrics Lib "User32"

根据Office版本声明函数:

#If Win64 Then  'Win64=true, Win32=true, Win16= false
Private Declare PtrSafe Function apiGetSystemMetrics Lib "User32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long
Private Declare PtrSafe Function apiGetSystemMetrics32 Lib "User32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long
#ElseIf Win32 Then 'Win32=true, Win16=false
Private Declare Function apiGetSystemMetrics Lib "User32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long
#Else ' Win16=true
#End If

通用函数:

Public Function dllGetMonitors() As Long
Const SM_CMONITORS = 80
dllGetMonitors = apiGetSystemMetrics(SM_CMONITORS)
End Function


'The width of the virtual screen, in pixels.
'The virtual screen is the bounding rectangle of all display monitors

Public Function dllGetHorizontalResolution() As Long
Const SM_CXVIRTUALSCREEN = 78
dllGetHorizontalResolution = apiGetSystemMetrics(SM_CXVIRTUALSCREEN)
End Function

Public Function dllGetVerticalResolution() As Long
Const SM_CYVIRTUALSCREEN = 79
dllGetVerticalResolution = apiGetSystemMetrics(SM_CYVIRTUALSCREEN)
End Function

.

更多信息:http://msdn.microsoft.com/en-us/library/ms724385(VS.85).aspx

我用来确定表单是否在屏幕外的函数:

Private Sub checkOffScreen(ByRef frm)
Dim maxTop As Long, minLeft As Long, maxLeft As Long
Dim defaultOffset As Byte, monitors As Byte

monitors = celTotalMonitors.Value
defaultOffset = 11
minLeft = 0 - (frm.Width - defaultOffset)
If monitors = 1 And celScreenResolutionX.Value > 1280 Then
maxTop = 1180 - defaultOffset
maxLeft = 1900 - defaultOffset
Else
maxTop = 750 - defaultOffset
maxLeft = (960 * monitors) - defaultOffset
End If
With frm
'If (celFormTop.Value < 0 Or celFormTop.Value > maxTop) Or _
(celFormLeft.Value < minLeft Or celFormLeft.Value > maxLeft) Then
'If .top < 0 Or .top > maxTop Or .Left < minLeft Or .Left > maxLeft Then
If celFormTop.Value > maxTop Or celFormLeft.Value > maxLeft Then
celFormTop = defaultOffset
celFormLeft = defaultOffset
End If
If .Top > maxTop Or .left > maxLeft Then
.Top = defaultOffset
.left = defaultOffset
End If
End With
End Sub

关于excel - 如何使用 Excel VBA 最大化特定显示器上的窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42385598/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com