의견에서 언급 한대로 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
하지만 VBA가 내장 없다 그렇게하기 위해서. '.WindowState = xlMaximized'는 윈도우가 놓이는 모니터에서 항상 엑셀을 최대화합니다. 따라서 쉬운 방법이 없기 때문에 이것이 "가지고있는 것이 좋은가"아니면 "있어야 하는가"를 먼저 결정할 필요가 있습니다. –
불행하게도 그것은 "꼭 가지고 있어야"합니다. 그러나 어쨌든 "빠르고 더러운"해결책으로는 괜찮을 것입니다. :-) – Stefan
내가 말하려고했던 것은 "빠르고 더러운"것이 없습니다. 하지만이 대답 좀 봐 http://stackoverflow.com/a/7241038/3219613 Windows API를 통해 모니터 정보를 얻기위한 몇 가지 코드 조각이 있습니다. –