| 
    
     |  | ▼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
 
 
 |  |