|
> 邪道なのでしょうか・・・・・・?
コーディングに「邪道」と言う概念はないと
思いますよ。しかし、今回の現象はModeless
Userformのバグの一つだと私は思います。
(VBAのUserformに完璧さを求めるのも無意味ですけどね)
Userformもクラスですので、オブジェクトイベントの
キャッチが可能です。それを利用すれば、もう少し
シンプルにコードを書けます。
WorkbookイベントもUseformモジュールの
中で記述するだけです。そうすると、Userformインスタンスが
存在する時だけに目的のイベントを掴む事ですので。
それから、上で述べましたように今回の件は
ModelessユーザーフォームをHideする際、インスタンス管理に
なにかしら問題があると考えられます。
個人的には「Userform1」と言うクラス名を直接使うのは
テスト以外ではほとんどないですが、
今回は下記のような非同期Likeな方法で回避できると思います。
(本音はAPITimerを使うべきだと思っていますが)
'(標準モジュール)
Private Sub auto_open()
UserForm1.Show 0
End Sub
Private Sub FormHide()
UserForm1.Hide
End Sub
'(Userformモジュール)
Private WithEvents WB As Workbook
Private Sub UserForm_Initialize()
Set WB = ThisWorkbook
End Sub
Private Sub WB_Activate()
StartUpPosition = 0 '元の位置から表示。
Show 0
End Sub
Private Sub WB_Deactivate()
Application.OnTime Now, "FormHide"
End Sub
Private Sub WB_BeforeClose(Cancel As Boolean)
Set WB = Nothing
End Sub
|
|