« ◆Excel VBA(カスタムツールバー) | トップページ | ◆Excel VBA(Excel起動時に前回終了ウィンドウ状態を再現) »

2007年3月21日 (水)

◆Excel VBA(タイトルバーの動的な変更)

本日は第5弾として、タイトルバーの動的な変更です。

タイトルバーの変更自体は難しいことではありません。以下の命令で変更できます。flgによってタイトルバーの変更/戻しを実行する例です。

    If flg = False Then
        Application.Caption = ""                      ’タイトルバーの戻し
    Else
        Application.Caption = "ほげほげ"         ’タイトルバーの変更
    End If
   

しかし、わざわざ”動的”と謳っているのは意味があります。

皆さんはブックを開いたあとでこのブックはどこのフォルダから開いたファイルだったかなぁと思ったことはありませんか?

そこで、今アクティブにしているブックのパスをタイトルバーに表示することを考えました。

つまり複数ブックを開いて作業しているときに、アクティブにしたブックのパスを動的に表示するわけです。

これを実現するにはクラスモジュールを用意しなければなりません。

ちょっと高度ですが、なにも考えず以下の手順で作成してみてください。(5)はパスだけではなくファイルサイズも表示する例です。

(1)処理を記述するためのブックを新規作成する。

(2)VBEのVBAProject上で右クリックをし、「挿入」→「クラスモジュール」を選択する

(3)Thisworkbook に Dim Aw As New Class1 を記述する

(4)Thisworkbook に 以下のWorkbook_openを追加する

     Private Sub Workbook_open()
         Set Aw.App = Application
     End Sub

(5)(2)で作成したClass1に以下の処理を記述する

    Private Sub App_WindowActivate(ByVal wb As Excel.Workbook, ByVal Wn As Excel.Window)
        If wb.Path = "" Then
            Application.Caption = ""
        Else
            Application.Caption = "Microsoft Excel " & wb.FullName & " (" _
                        & Format(FileLen(wb.FullName), "###,##0") & "Byte" & ")"
        End If
    End Sub

(6)一旦新規ブックを保存し、Excelと新規ブック共に再起動するとあら不思議、複数ブックをアクティブにしていくとタイトルバーが動的に変化します。よね?変化すれば完成です。今回作成した新規ブックは非表示にしておくと良いでしょう。邪魔にならないので。

少し解説すると、(3)(4)はおまじないだと思ってください。深く知りたい方はVBAヘルプでまず「Application オブジェクトでイベントを使用する」を検索していろいろ読み進めていってください。ネット上にもたくさん解説ページがあります。

次に、処理本体の(5)ですが、App_WindowActivateというExcel標準のクラスイベントを定義しています。これはウィンドウがアクティブになった時に発生するExcelが予め持っているイベントです。ここに処理を書いておくことで今回の目的を実現しています。さらにwbはアクティブになったブックオブジェクトが渡されますので処理に利用しています。If wb.Path = "" Thenは、一度も保存されていないブックがアクティブにされたことを想定しています。つまり、保存されていないのでパスが取得できないわけです。

実はこのイベントだけでは、Excelで作業をしていく上でいろいろ不都合が発生します。例えば、書き換えたタイトルバーの初期化(=戻し)の問題です。ま、これは他にもクラスイベントがあるのでそれらを参考に作成してみてください。

以上でタイトルバーの動的変更についての説明はおしまいです。ちょっと難しかったですがクラスイベントは自分で作成することが出来て、Excelを拡張する手段として奥が深いので研究してみてはいかがでしょうか。

次回は、Excel起動時に前回終了ウィンドウ状態を再現について。

※私が作成したVBAツールです。よかったら使ってみてください。

« ◆Excel VBA(カスタムツールバー) | トップページ | ◆Excel VBA(Excel起動時に前回終了ウィンドウ状態を再現) »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« ◆Excel VBA(カスタムツールバー) | トップページ | ◆Excel VBA(Excel起動時に前回終了ウィンドウ状態を再現) »