« ◆Outlook VBA(Outlookのカスタマイズと配布方法) | トップページ | ◆Outlook VBA(複数メールの添付ファイルを一括保存) »

2007年4月 4日 (水)

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

今回はOutlookのタイトルバーを動的に変更してみます。
なぜタイトルバーを変更したいのかというと、ExcelはステータスバーにてApplication.StatusBar="ほげほげ"で変更できますが、Outlookは2007に至るまで出来ないようです(私が知らないだけかも)。私はよく、時間のかかる処理の場合、ステータスバーに進行状況を表示するのですが、Outlookはそれが出来ないじゃありませんか。そこで、ステータスバーの変わりにタイトルバーに進行状況を表示してしまえと考えたわけです。

しかし、前述のとおり簡単には変更できません。WindowsAPIを使用します。以下に例を示します。

    '現在のウィンドウタイトル取得
    hWnd = GetActiveWindow()
    MyTitle = String(250, Chr(10))
    Leng = Len(MyTitle)
    ret = GetWindowText(hWnd, MyTitle, Leng)

    '長い処理
    For Each oSel In myOlSel
        i = i + 1
        ret = SetWindowText(hWnd, oSel & "(" & i & "/" & myOlSel.Count & ")" & "を処理中...")

        内容省略。。。。

       
    Next
   
    ret = SetWindowText(hWnd, MyTitle)
    MsgBox "終了しました。総数:" & i

解説すると、GetWindowText関数で予め現在のタイトルバーの文言を取得しておきます。ウィンドウハンドルが必要なのでGetActiveWindow関数でアクティブウィンドウを取得します。次に長い処理の間にSetWindowText関数でタイトルバーに情報を設定します。上記は、複数選択されたメールを処理する際に”メール件名(分子/分母)”を表示させる例です。そして、最後に取得しておいたタイトルバーを元に戻して終了です。

変更されているタイトルバーの画像

WindowsAPIの宣言は以下の通り。

'アクティブウィンドウハンドルを取得する
Private Declare Function GetActiveWindow Lib "USER32" () As Long
'ウィンドウタイトル取得
Private Declare Function GetWindowText Lib "USER32" Alias "GetWindowTextA" (ByVal hWnd&, ByVal lpString$, ByVal cch&) As Long
''ウィンドウタイトル変更
Private Declare Function SetWindowText Lib "USER32" Alias "SetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String) As Long

今回はここまでとします。結構簡単でしたね。次回のネタは未定です。それでは。

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

« ◆Outlook VBA(Outlookのカスタマイズと配布方法) | トップページ | ◆Outlook VBA(複数メールの添付ファイルを一括保存) »

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

コメント

コメントを書く

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

« ◆Outlook VBA(Outlookのカスタマイズと配布方法) | トップページ | ◆Outlook VBA(複数メールの添付ファイルを一括保存) »