2022年3月24日木曜日

【作業中のディスプレイにユーザーフォームを表示させる方法】


フォームモジュールを右クリックしコード表示をして下記のコードを書き込む


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