Чтобы получить разрешение экрана операционной среды, вы можете использовать код:
Private Declare Function GetSystemMetrics32 Lib "User32" _
Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long
Private Declare Function GetDC Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" _
(ByVal hDC As Long, ByVal nIndex As Long) As Long
Private Declare Function ReleaseDC Lib "user32" _
(ByVal hwnd As Long, ByVal hDC As Long) As Long
Private Const LOGPIXELSX = 88 'Might be wrong as online says 96
Private Const LOGPIXELSY = 96
Private Const POINTS_PER_INCH As Long = 72
Public Function PointsPerPixel() As Double
Dim hDC As Long
Dim lDotsPerInch As Long
hDC = GetDC(0)
lDotsPerInch = GetDeviceCaps(hDC, LOGPIXELSX)
PointsPerPixel = POINTS_PER_INCH / lDotsPerInch
ReleaseDC 0, hDC
End Function
Public Function PixelsPerPoint() as Double
Dim hDC As Long
Dim lDotsPerInch As Long
hDC = GetDC(0)
lDotsPerInch = GetDeviceCaps(hDC, LOGPIXELSX)
PixelsPerPoint = lDotsPerInch / POINTS_PER_INCH
ReleaseDC 0, hDC
End Function
Function ScreenRes() as Double()
Dim resolution(2) as Double
resolution(0) = GetSystemMetrics32(0) ' width in points
resolution(1) = GetSystemMetrics32(1) ' height in points
ScreenRes = Resolution
End Function
Для получения разрешения используйте ScreenRes()
. Затем вы можете найти местоположение форм, используя formName.left
и formName.top
, и я считаю, что это местоположение на основе точек. Вы можете получить код либо преобразовать его в Pxl, либо преобразовать размер экрана в точки. Затем, чтобы переместить книгу Excel, вы можете использовать Application.left
и Application.top
, и я почти уверен, что это также в пунктах.
Если вы хотите отформатировать его лучше для экрана, вы также можете использовать Application.width
и Application.height
в сочетании с formName.width
и formName.height
. Вы можете проверить, находятся ли границы формы за пределами экрана, используя if (formName.left + formName.width) > (PixelsToPoint *(ScreenRes)(0)) and (formName.left > 0)
и аналогичную форму для высоты.
Вероятно, в моем коде есть ошибки, поскольку я не проверял его в VBA, но, надеюсь, это начало того, что вам нужно. Если кто-то захочет внести изменения в мой код, я буду чрезвычайно признателен, и надеюсь, что сказанное мной поможет, поскольку ваш вопрос был немного расплывчатым.