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

2011年9月10日土曜日

solaris:testコマンドで-Lが使えない。

if [ -L $link ]
   then
        echo ok
   else
        echo ng
fi

上記のようなシェルを実行すると、argment expectedと怒られる。 他のOSでも動かしたかったので(動かしたいのは上記シェルではない)、uname -sの結果がSunOSだったときは-hでtestコマンドを実行するようにした。
testのmanページには、-Lが記載されているのになぜと思って色々調べたりしている過程でふとkshで実行してみようと思い、以下のコマンドを実行してみた。
# ksh
# test -L link
# echo $?
0

次回からはkshだなぁと思ったそんな話し。

フォロワー