記事キャッチ画像  (33) WindowResize イベントを利用して、Excelブックのウィンドウサイズ変更を禁止する! 

 1. モジュール内で有効な変数を、宣言(定義)する 

 2. Workbook_WindowResize イベントを利用して、ブックのウィンドウサイズを固定化する 

  「広告」  
 


 (33) WindowResize イベントを利用して、Excelブックのウィンドウサイズ変更を禁止する! 


Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。 

Excel 2016 for Mac 環境での説明となりますので、 Mac版 Excel 2011 では( VBA が利用できますが )同じ結果にならない場合があるかもしれません。

現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)

前回使用した XLSM ファイルを、「マクロを有効」にして開きます。

49


Rem
Rem    ThisWorkBook
Rem

Option Explicit

Dim MyWindow_width As Long
Dim MyWindow_height As Long

上記ピンク色の2行は、WorkBookモジュールの先頭に記述してある「 Option Explicit 」の直後に記述する! (つまり、プロシージャ内ではなく、プロシージャ外に記述)



'--------------------------------
'    Event: WindowActivate()
'--------------------------------
Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)
    MyWindow_width = Wn.Width
    MyWindow_height = Wn.Height
    Debug.Print "Event: Workbook_WindowActivate"
    Wn.WindowState = xlNormal    ' xlMaximized (最大化)
End Sub

前回追加した Workbook_WindowActivate プロシージャの先頭に、現状のウィンドウサイズを保存するピンクの2行を追加する。
Excelブックを開いた際にもこのイベントは発生する点が、ポイント!



'--------------------------------
'    Event: WindowResize()
'--------------------------------
Private Sub Workbook_WindowResize(ByVal Wn As Excel.Window)

    Application.EnableEvents = False

        Wn.Width = MyWindow_width
        Wn.Height = MyWindow_height

    Application.EnableEvents = True

    Application.StatusBar = """" & Wn.Caption & _
    """  is  resized  ( " & Wn.Width & " , " & Wn.Height & " )"

End Sub

(注) Excel.Window 型は、 Window 型を用いても良い。


 1. モジュール内で有効な変数を、宣言(定義)する 

35

プロシージャ内で宣言した変数は、そのプロシージャ内のみ有効だ。
プログラム用語だと、変数の有効範囲(スコープ)と言う。
もちろん、スコープを(プロシージャ外に)広げることも可能で、その方法を以下に紹介する。
 
モジュール内の全てのプロシージャから利用できる変数を宣言するには、上記画面のようにプロシージャ外で Dim ステートメントを使用すれば良い。
通常、「 Option Explicit 」の直後に記述するのが一般的だ。
モジュール(レベル)変数と呼ぶことが多い。

また、ブック内の全てのモジュールから利用できる変数を宣言するには、次のようにプロシージャ外で Public ステートメントを使用すれば良い。
 Public PublicWindow_width as Long
 Public PublicWindow_height as Long
通常、ユーザー定義モジュール(ModuleN)内で、「 Option Explicit 」の直後に記述するのが一般的だ。
パブリック(レベル)変数と呼ぶことが多い。


 2. Workbook_WindowResize イベントを利用して、ブックのウィンドウサイズを固定化する 

55

Workbook_WindowActivate プロシージャで保存した変数の値を、 Workbook_WindowResize プロシージャ で利用する。
このために、今回 モジュール(レベル)変数 を宣言した。
名前のとおり、Excelブックのウィンドウサイズを変更した際に発生するイベントだ。
Workbook_WindowActivate イベントを発生させるため、 VBAコードの保存も兼ねて(コードの変更・追加後)Excel を保存終了後して 再度開き直して欲しい。

以前に説明した Application.EnableEvents に False を設定してイベント抑制するのは、ウィンドウサイズを VBAコード内で変更する際にも Workbook_WindowResize イベントが発生するため!
ウィンドウの幅 Width と 高さ Height を 設定直後に、 True に必ず戻す必要がある。 
もしもイベントが発生しなくなった時は、イミディエイトウィンドウにて「 Application.EnableEvents = True 」と叩いて通常の状態に戻せば良い。

以前に説明したとおり、VBでは文字列を ダブルコーテーション で囲むため、 文字列内で ダブルコーテーション を含めたい場合は "" にて「ダブルコーテーション1文字」となる。

ウィンドウサイズを変更しようとすると、元のサイズに戻されるのがよく解る。
もちろん、 
 Wn.Width = 1000
 Wn.Height = 500
のように常に固定値指定も大丈夫だ。


次回も、 Excelブックの まだ説明していないイベント です!


お疲れ様でした!
[command] + [Q] にてExcel を終了時、「作業中のブック」を保存するか確認のダイアログ画面が表示されるため 「保存」しましょう。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)


最後まで読んでいただき、ありがとうございます。
ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル