2017-02-22 6 views
3

현재 VBA Excel을 사용하여 특정 화면에서 창을 최대화하는 방법을 찾고 있습니다. 지금까지, 나는 여기에이 코드를 사용 :vba를 사용하여 특정 모니터에서 창을 최대화하는 방법 Excel

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

내가 사용하는 것보다 (모니터 2 1. 모니터링하는 오른쪽은 그러나 다른 방법이 주위에 있다면, 접근이 실패 할 경우 코드는 어떻게 든 좋은 작품 -1200). 불행히도이 매크로는 시스템이 어떻게 구성되어 있는지 모르는 다른 PC에서 작동해야합니다. 얼마나 많은 모니터가 연결되어 있는지 감지하고 창을 최대화하려는 각 모니터를 직접 지정할 수 있습니까?

도움 주셔서 감사합니다.

+0

하지만 VBA가 내장 없다 그렇게하기 위해서. '.WindowState = xlMaximized'는 윈도우가 놓이는 모니터에서 항상 엑셀을 최대화합니다. 따라서 쉬운 방법이 없기 때문에 이것이 "가지고있는 것이 좋은가"아니면 "있어야 하는가"를 먼저 결정할 필요가 있습니다. –

+0

불행하게도 그것은 "꼭 가지고 있어야"합니다. 그러나 어쨌든 "빠르고 더러운"해결책으로는 괜찮을 것입니다. :-) – Stefan

+1

내가 말하려고했던 것은 "빠르고 더러운"것이 없습니다. 하지만이 대답 좀 봐 http://stackoverflow.com/a/7241038/3219613 Windows API를 통해 모니터 정보를 얻기위한 몇 가지 코드 조각이 있습니다. –

답변

1

의견에서 언급 한대로 Windows API를 사용해야합니다. 버전에 따라 기능을 선언하는 GetSystemMetrics 해방 "가 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

나는 형태로 화면 꺼져 있는지 확인하는 데 사용되는 기능 : 나는이 작업이 완료 얻기 위해 윈도우 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