2011年9月30日金曜日

EXCEL VBA:UserFormの表示位置変更

セルに値を入力するフォームを作成したが、Windowサイズよっては、入力対象のセルにフォームが重なるのでフォームをクリックしたときに適当な位置にフォームが寄るようにしようと思った。
最初はActiveなブックの中のオブジェクトの座標を取得してその脇に移動すればいいだろうと思ったが、そう都合よくことが運ばなかった。
フォームのポジションは画面の左端からの位置で、Activeなブックの中のオブジェクトのポジションはブックの左端からの位置だった。
従って、適当な位置にフォームを移動させるには、Activeなブックの左端のポジションを取り出す必要があったが、ActiveWindowのプロパティにleftという都合のよい要素がなかったので、フォームの位置とActiveWindowのwidthに補正値を加味した値を、フォームの移動先とする案が浮かび以下のようなマクロを作成した。

'-- サンプルマクロ
Public lockval As String

Private Sub UserForm_Click()

Dim leftstart As Long, center As Long, hosei As Long, mvpos As Long

'初期値
leftstart = UserForm1.Left

'ActiveWindowのセンター(相対的なセンター)
center = ActiveWindow.Width / 2 -  (UserForm1.Width / 2)

'移動位置の補正値(適当な値)
hosei = 320

'フォームの移動
mvpos = (leftstart + hosei) - center
'mvpos = (leftstart) - center 'ActiveWindowのleft

If lockval = "" Then
UserForm1.Left = mvpos
lockval = "lock"
End If

End Sub

0 件のコメント:

コメントを投稿

フォロワー