フォームモジュールを右クリックしコード表示をして下記のコードを書き込む
Sub UFPositionCenter(UFOb As Object)
'**ユーザーフォームを親ウィンドウの中央に表示する
'参考
'https://dz11.hatenadiary.jp/entry/2019/05/17/090258
'標準モジュールではMeが使えないので、ユーザーフォーム側にて引数として呼び出す
'**変数(T=Top,L=Left,W=Width,H=Height,AW=ActiveWindow,UF=UserForm)
Dim T_AW As Long, L_AW As Long, W_AW As Long, H_AW As Long
Dim T_UF As Long, L_UF As Long, W_UF As Long, H_UF As Long
'**親ウィンドウの位置とサイズを取得
With ActiveWindow
T_AW = .Top
L_AW = .Left
W_AW = .Width
H_AW = .Height
End With
'**UFのサイズを取得
W_UF = UFOb.Width
H_UF = UFOb.Height
'**UFの表示位置を計算
T_UF = T_AW + ((H_AW - H_UF) / 2)
L_UF = L_AW + ((W_AW - W_UF) / 2)
'**UFの表示位置を設定
UFOb.StartUpPosition = Manual
'**Top,Left指定時に必須(ないとLeftがずれる)
UFOb.Top = T_UF
UFOb.Left = L_UF
End Sub
Private Sub UserForm_Initialize()
Call UFPositionCenter(Me)
End Sub
ThisWorkbookモジュールに書き込めばファイルを開くと同時にフォームが表示される。
Private Sub Workbook_open()
UserForm1.StartUpPosition = 1
UserForm1.Show
End Sub