2017-02-22 10 views
3

現在、VBA Excelを使用して特定の画面でウィンドウを最大化する方法を探しています。これまでのところ、私はここにこのコードを使用:vbaで特定のモニタのウィンドウを最大化する方法Excel

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

私が使用しているよりも(モニタ2が1を監視するための右の手はある。しかし、それは他の方法で回避だ場合、アプローチが失敗した場合のコードは、何らかの形で、素晴らしい作品-1200)。残念ながら、このマクロは異なるPC上で動作するはずです。私はシステムがどのように設定されているのかわかりません。どのモニターが接続されているかを検出し、ウィンドウを最大化したいそれぞれのモニターに直接アドレスする可能性はありますか?

ありがとうございました。

+0

が、何のVBAが構築されていませんこれを行うには。 '.WindowState = xlMaximized'は、ウィンドウが置かれているモニタ上のExcelを常に最大にします。だから、もし簡単な方法がないので、これが「持っているのがいい」か、「必要がある」かを最初に決める必要があります。 –

+0

残念ながら、それは "必需品"です。しかし、何とか「迅速かつ汚れた」解決策でうまくいくでしょう:-) – Stefan

+1

私は「迅速かつ汚れていません」とは言いませんでした。しかし、この答えを見てくださいhttp://stackoverflow.com/a/7241038/3219613 Windows APIを介してモニタ情報を取得するためのいくつかのコードスニペットがあります。 –

答えて

1

コメントに記載されているとおり、Windows APIを使用する必要があります。 GetSystemMetrics関数のLib「がUser32」

バージョンに基づいて関数を宣言する:これは、ユーザーフォームがスクリーン(単数または複数)の表示領域を離れて移動された場合、私が決定する助け別の(使用するのが比較的簡単)APIであります

#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

私は、フォームが画面オフになっているかどうかを判断するために使用される関数:私はそれはこれが行わ取得するにはWindowsのAPIを使用して可能になると思います

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 
関連する問題