注意 16-07-26 本記事の内容に間違いがありました。 紹介したWordマクロは使えません。検証不足でのアップを失礼しました。
Wordで動く翻訳チェックソフト「色deチェック」やWordから高度なWeb検索をする「右クリックでGoogle!」などのWordアドインでユーザーフォームを使っています。
このユーザーフォームの表示位置でときどき問題が起こります。
ノートパソコンでセミナーのプレゼン準備をオフィスでしているとき、私は外部モニターに接続して大きな画面で作業をします。
このとき、大きな画面の右端にユーザーフォームを表示させておきます。作業の邪魔にならないからです。
ユーザーフォームの表示位置を記憶するような仕様になっているので、ユーザーフォームを起動するたびにこの位置に表示されます。
セミナー会場でノートパソコンで同じユーザーフォームを表示させようとしたところ画面に現れないのです。あれ?
ノートパソコンの解像度の関係で、表示可能な領域が限られています。
このとき、私のアドインの場合、ユーザーフォームを記憶した位置に表示しています。つまり、画面の外に表示されていたのです。
過去何度かこのような痛い失敗をしました。
アドインのユーザーの方からも、ノートパソコンで使おうとしたときに私と同じ理由でユーザーフォームを表示できなくて困ったことがあると連絡をいただきました。
まずは、色deチェックのアップデートでこの機能を実装します。他のアドインにも徐々に実装していきます。
<目次>
このマクロでできること
パソコンの解像度を超えた位置にユーザーフォームを表示しようとすると、ユーザーフォームをウィンドウの中央に表示させます。
マクロの解説
System.VerticalResolution System.HorizontalResolution
上記の記述で、縦方向の解像度と横方向の解像度を取得できます。
この解像度とユーザーフォームの表示位置(レジストリに保存したもの)を比較しています。
マクロ
<del>Private Sub UserForm_Initialize() Dim myTop As Long Dim myLeft As Long '------------------------------------------- '読込み(事前にレジストリに値の保存が必要です) '------------------------------------------- myTop = GetSetting("myAppName", "Section", "fmTop") myLeft = GetSetting("myAppName", "Section", "fmLeft") '------------------------------------------- 'ユーザーフォームの表示 '------------------------------------------- With UserForm1 If myTop > System.VerticalResolution Or _ myLeft > System.HorizontalResolution Then .StartUpPosition = 1 .Show Else .StartUpPosition = 0 .Top = myTop .Left = myLeft .Show End If End With End Sub </del>