|
▼mixia さん:
> VBAが記述されているワークブックではないワークブック(シート)
> からさらに別のワークブック(シート)が選択されたといったこと
> を取得することは可能でしょうか?
いわゆるアプリケーションレベルのイベントのことですよね?
これはExcel.Applicationクラスにあります。
そのUserForm で
ひとつExcel.Applicationのインスタンスを「イベント付きで」作成
して、テストしてみてください。
'------------------------------- UserForm モジュール
Option Explicit
Private WithEvents XLApp As Excel.Application
↑UserForm モジュールの宣言セクションに上のように宣言すると、
コードウィンドウの上部の左のドロップダウンリストに
--------------▼
(General)
ComboBox1
Userform1
XLApp <--- これが追加される
--------------
いま宣言したXLAppクラスが 他のコントロールにならんで追加されたこと
が確認できます。
で、これを使うためにはまず
UserFormの初期化イベントプロシージャに、
XLAppクラスを実行可能なオブジェクトにする(インスタンスを作成する)
設定をしておきます。↓
Private Sub UserForm_Initialize()
Set XLApp = Excel.Application
End Sub
また、UserFormが閉じるとき、XLAppオブジェクトも終了するために
UserFormの終了イベントに以下のように、インスタンスを破棄して
おきます。
Private Sub UserForm_Terminate()
Set XLApp = Nothing
End Sub
あとは、コードウィンドウの先ほどの左ドロップダウンから
-----------▼ -------------------------▼
XLApp WindowActivate
WindowDeactivate
------------
「XLApp」 を選ぶと コードウィンドウの右ドロップダウンにXLApp 関連の
Event リストがずらっと出てきますので、やろうとしている処理にあった
Eventを選んで、そのイベントプロシージャ内に処理を記述します。
たとえば、ウィンドウが切り替わった時にはApplicationレベルの
WindowDeactivate イベントやWindowActivateイベントが発生しますので
ここで現在アクティブになっているWindowのZoomを取得すればよいわけです。
Private Sub XLApp_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
MsgBox Wn.Zoom
End Sub
といった感じで。
シートが切り替わったときには、SheetActivateイベントが発生するので
ここに処理を書いておいてもいいかもしれません。
Private Sub XLApp_SheetActivate(ByVal Sh As Object)
MsgBox XLApp.ActiveWindow.Zoom
End Sub
|
|