(33) WindowResize イベントを利用して、Excelブックのウィンドウサイズ変更を禁止する!
1. モジュール内で有効な変数を、宣言(定義)する
2. Workbook_WindowResize イベントを利用して、ブックのウィンドウサイズを固定化する
Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。
Excel 2016 for Mac 環境での説明となりますので、 Mac版 Excel 2011 では( VBA が利用できますが )同じ結果にならない場合があるかもしれません。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)
前回使用した XLSM ファイルを、「マクロを有効」にして開きます。
上記ピンク色の2行は、WorkBookモジュールの先頭に記述してある「 Option Explicit 」の直後に記述する! (つまり、プロシージャ内ではなく、プロシージャ外に記述)
前回追加した Workbook_WindowActivate プロシージャの先頭に、現状のウィンドウサイズを保存するピンクの2行を追加する。
Excelブックを開いた際にもこのイベントは発生する点が、ポイント!
(注) Excel.Window 型は、 Window 型を用いても良い。
プロシージャ内で宣言した変数は、そのプロシージャ内のみ有効だ。
プログラム用語だと、変数の有効範囲(スコープ)と言う。
もちろん、スコープを(プロシージャ外に)広げることも可能で、その方法を以下に紹介する。
モジュール内の全てのプロシージャから利用できる変数を宣言するには、上記画面のようにプロシージャ外で Dim ステートメントを使用すれば良い。
通常、「 Option Explicit 」の直後に記述するのが一般的だ。
モジュール(レベル)変数と呼ぶことが多い。
また、ブック内の全てのモジュールから利用できる変数を宣言するには、次のようにプロシージャ外で Public ステートメントを使用すれば良い。
Public PublicWindow_width as Long
Public PublicWindow_height as Long
通常、ユーザー定義モジュール(ModuleN)内で、「 Option Explicit 」の直後に記述するのが一般的だ。
パブリック(レベル)変数と呼ぶことが多い。
Workbook_WindowActivate プロシージャで保存した変数の値を、 Workbook_WindowResize プロシージャ で利用する。
このために、今回 モジュール(レベル)変数 を宣言した。
名前のとおり、Excelブックのウィンドウサイズを変更した際に発生するイベントだ。
Workbook_WindowActivate イベントを発生させるため、 VBAコードの保存も兼ねて(コードの変更・追加後)Excel を保存終了後して 再度開き直して欲しい。
以前に説明した Application.EnableEvents に False を設定してイベント抑制するのは、ウィンドウサイズを VBAコード内で変更する際にも Workbook_WindowResize イベントが発生するため!
ウィンドウの幅 Width と 高さ Height を 設定直後に、 True に必ず戻す必要がある。
Wn.Height = 500
のように常に固定値指定も大丈夫だ。
お疲れ様でした!
[command] + [Q] にてExcel を終了時、「作業中のブック」を保存するか確認のダイアログ画面が表示されるため 「保存」しましょう。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)
ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル
1. モジュール内で有効な変数を、宣言(定義)する
2. Workbook_WindowResize イベントを利用して、ブックのウィンドウサイズを固定化する
「広告」
(33) WindowResize イベントを利用して、Excelブックのウィンドウサイズ変更を禁止する!
Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。
Excel 2016 for Mac 環境での説明となりますので、 Mac版 Excel 2011 では( VBA が利用できますが )同じ結果にならない場合があるかもしれません。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)
前回使用した XLSM ファイルを、「マクロを有効」にして開きます。
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. モジュール内で有効な変数を、宣言(定義)する
プロシージャ内で宣言した変数は、そのプロシージャ内のみ有効だ。
プログラム用語だと、変数の有効範囲(スコープ)と言う。
もちろん、スコープを(プロシージャ外に)広げることも可能で、その方法を以下に紹介する。
通常、「 Option Explicit 」の直後に記述するのが一般的だ。
モジュール(レベル)変数と呼ぶことが多い。
また、ブック内の全てのモジュールから利用できる変数を宣言するには、次のようにプロシージャ外で Public ステートメントを使用すれば良い。
Public PublicWindow_width as Long
Public PublicWindow_height as Long
通常、ユーザー定義モジュール(ModuleN)内で、「 Option Explicit 」の直後に記述するのが一般的だ。
パブリック(レベル)変数と呼ぶことが多い。
2. Workbook_WindowResize イベントを利用して、ブックのウィンドウサイズを固定化する
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以前に説明したとおり、VBでは文字列を ダブルコーテーション で囲むため、 文字列内で ダブルコーテーション を含めたい場合は "" にて「ダブルコーテーション1文字」となる。
ウィンドウサイズを変更しようとすると、元のサイズに戻されるのがよく解る。
もちろん、
Wn.Height = 500
のように常に固定値指定も大丈夫だ。
次回も、 Excelブックの まだ説明していないイベント です!
お疲れ様でした!
[command] + [Q] にてExcel を終了時、「作業中のブック」を保存するか確認のダイアログ画面が表示されるため 「保存」しましょう。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)
「広告」amazon WINTER SALE
最後まで読んでいただき、ありがとうございます。ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル
コメント