0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Access VBA】フォームを画面中央に移動(絶対座標使用)

Last updated at Posted at 2025-01-27

はじめに

Access VBAでフォームをメインディスプレイの画面中央に絶対座標で移動する方法を紹介します。

コード

Public Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Public Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hwnd As LongPtr, ByRef lpRect As RECT) As LongPtr
Public Declare PtrSafe Function MoveWindow Lib "user32" (ByVal hwnd As LongPtr, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As LongPtr

'GetSystemMetricsの引数
Private Const SM_CXFULLSCREEN As Long = 16 '用途:メインディスプレイの画面の幅 取得
Private Const SM_CYFULLSCREEN As Long = 17 '用途:メインディスプレイの画面の高さ 取得

'GetWindowRectの戻り値を格納するユーザー定義型
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

'フォームをメインディスプレイの画面中央に移動
Public Sub MoveFormToCenterOfScreen(ByVal formName As String)

    Dim RectObject As RECT 'GetWindowRectの戻り値を格納するオブジェクト
    
    Dim widthScreen As Long 'メインディスプレイの画面の幅
    Dim heightScreen As Long 'メインディスプレイの画面の高さ
    
    Dim widthForm As Long 'フォームの幅
    Dim heightForm As Long 'フォームの高さ
    
    Dim leftPosition As Long 'フォームの左座標
    Dim topPosition As Long  'フォームの上座標
    
'メインディスプレイの幅・高さを取得
    widthScreen = GetSystemMetrics(SM_CXFULLSCREEN) 'メインディスプレイの画面の幅
    heightScreen = GetSystemMetrics(SM_CYFULLSCREEN) 'メインディスプレイの画面の高さ
    
'フォームの幅・高さを取得
    Call GetWindowRect(Forms(formName).hwnd, RectObject) 'フォームのRECTオブジェクト取得
    widthForm = RectObject.Right - RectObject.Left 'フォームの幅
    heightForm = RectObject.Bottom - RectObject.Top 'フォームの高さ
    
'移動後のフォームの横座標・縦座標を取得
    leftPosition = (widthScreen - widthForm) / 2 '画面中央に移動後のフォームの左座標(絶対座標)
    topPosition = (heightScreen - heightForm) / 2  '画面中央に移動後のフォームの上座標(絶対座標)

'フォームをメインディスプレイの画面中央に移動
    Call MoveWindow(Forms(formName).hwnd, leftPosition, topPosition, widthForm, heightForm, True)
    
End Sub

呼び出し側のコード

Sub test()
    Call MoveFormToCenterOfScreen("SampleForm")
End Sub
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?