注意 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>








