ちょっと前まで夏だと思っていたのに,もう秋ですねぇ。夏の海が恋しい。
「アプリケーションのいろいろな場面で,ユーザーにメッセージを伝えたいのですが,メッセージボックスだけでは味気なくて…。もっとエレガントでスマートなメッセージの表示方法はないでしょうか?」 |
“エレガントでスマートな方法”って言われても,今ひとつピンと来ませんが,そこそこおもしろくてインパクトがあるメッセージ表示方法ならありますよ。私のお気に入りの冴子先生にしゃべってもらう方法です。おっと,しゃべると言っても声が出るわけではありません,文字だけです。
二通りの表示方法がある
カイル(いるか)や冴子先生などの「Officeアシスタント」(Office製品に組み込まれているアニメーションを使ったヘルプ機能)は,Assistantオブジェクトとして提供されています。他のオブジェクト同様にVBAで操作できます。
Officeアシスタント(以下,アシスタント)を使ってメッセージを表示するには,大きく二つの方法があります。Office XPから追加されたDoAlertメソッドを使う方法と,Office 2000でも使えるShowメソッドを使う方法です。DoAlertメソッドを使うほうが簡単ですので,まずはそちらから紹介しましょう。
リスト1[拡大表示]のマクロは,指定されたExcelファイルを開こうとして,そのファイルが存在しない場合,エラー・メッセージをデフォルトのアシスタントのバルーンに表示します(図1[拡大表示])。リスト1[拡大表示]を見てわかるように,AssistantオブジェクトのDoAlertメソッドを呼び出すだけです(1)。このメソッドには七つの引数があります。すべて必須で省略できません。第1引数にタイトル,第2引数に表示する文字列を指定します。第3引数はボタンの種類,第4引数はアイコンの種類,第5引数はアシスタントを表示したときに選択状態にするボタン,第6引数はキャンセル・ボタンのタイプを指定します。第7引数はブール型(Boolean)の値を指定します。ここにTrueを指定するとメッセージボックスに,Falseを指定するとアシスタントのバルーンにメッセージを表示します。ただし,アシスタントが非表示の設定になっている場合は,第7引数の値に関係なく,メッセージボックスが表示されます。
リスト1●指定したファイルが見つからないと,メッセージをOfficeアシスタントのバルーンに表示するプロシジャ。DoAlertメソッドを使っている
Sub OpenWorkbok_Type1() Dim myBookName As String myBookName = "C:\日経BP.xls" On Error GoTo ErrHandler1 Workbooks.Open myBookName On Error GoTo 0 Exit Sub ErrHandler1: With Assistant .DoAlert "あかん", _ "開こうとしたファイルがないでぇ。" _ & Chr(13) & myBookName, msoAlertButtonOK, _ msoAlertIconWarning, msoAlertDefaultFirst, _ msoAlertCancelFirst, False End With End Sub |
エラーにならないように注意する
一方,Showメソッドを使う方法(リスト2[拡大表示])は,いくつか注意が必要です。まず,アシスタントが有効かどうかを調べる必要があります。DoAlertメソッドはアシスタントが表示されていないときは自動的にメッセージボックスを表示しますが,NewBalloonオブジェクトのShowメソッドはアシスタントが無効(OnプロパティがFalse)の場合,メッセージを表示しないでマクロを終了します。そのため,Showメソッドを実行する前に,明示的にアシスタントを有効にしなければなりません。
リスト2●リスト1と同じ処理を,Showメソッドを使って記述したプロシジャ。Showメソッドを使う場合はいくつか注意が必要だ
Sub OpenWorkbok_Type2() Dim myBookName As String Dim ConditionOf_ON As Boolean Dim ConditionOf_Visible As Boolean With Assistant ConditionOf_ON = .On ConditionOf_Visible = .Visible On Error Resume Next .Filename = "saeko.acs" On Error GoTo 0 End With myBookName = "C:\日経BP.xls" On Error GoTo ErrHandler1 Workbooks.Open myBookName On Error GoTo 0 With Assistant .On = ConditionOf_ON .Visible = ConditionOf_Visible End With Exit Sub ErrHandler1: With Assistant .On = True .Visible = True .Animation = msoAnimationGetAttentionMajor End With Call WaitTime(1) With Assistant.NewBalloon .Heading = "あかん" .Text = "開こうとしたファイルがないでぇ。" _ & Chr(13) & myBookName .Icon = msoIconAlertWarning .Button = msoButtonSetOK .Show End With If ConditionOf_Visible = False Then Assistant.Visible = False End If If ConditionOf_ON = False Then Assistant.On = False End If End Sub |
しかし,ユーザーによっては,通常アシスタントを非表示または無効にしている人もいるでしょうから,マクロの実行を終えたらもとの設定に戻してあげるサービスが必要でしょう。そこで,リスト2[拡大表示]では,最初にアシスタントの表示に関する現在の設定(OnプロパティとVisibleプロパティの値)を保存します(1)。もし非表示/無効設定の場合は,マクロ終了直前にそれぞれ戻します(4)(11)。ちなみに,OnプロパティがTrue(有効)であれば,VisibleプロパティがFalse(非表示)であっても,Showメソッドでアシスタントを表示できます。
もう一つの注意点は,アシスタントのキャラクタを指定する場合,そのキャラクタ(ここでは冴子先生を意味するsaeko.acs)がインストールされているかどうかに配慮することです。Officeのインストール方法によっては,一部のキャラクタしかインストールされません。アシスタントのFilenameプロパティに,インストールされていないキャラクタを指定するとエラーになります。そこで,リスト2[拡大表示](2)では,エラートラップをしかけて,もし指定のアシスタントがインストールされていない場合(エラー発生時)は,Resume Nextによってキャラクタの指定のステートメントを無視する=キャラクタの指定をなかったことにします。
(3)で開こうとするファイルの情報(フルパス+ファイル名)を文字列型の変数に格納します。そのファイルを開こうとしてエラーになると,処理はErrHandler1に飛びます。AssistantオブジェクトのOnプロパティとVisibleプロパティをTrueにします(5)(6)。そして(7)でアシスタントのアクション(アニメーションの種類)を指定します。ただ,前述のようにOnプロパティがTrueであれば,Showメソッドによってアシスタントは表示されますので,(6)のステートメントは省略しても構いません。しかし,VisibleプロパティがFalse(非表示)の場合,OnプロパティをTrueにした時点で,AnimationプロパティにmsoAnimationAppear(キャラクタ登場)が設定され,(7)で指定したアクションが表示されないことがあります。
続く(8)で,WaitTimeプロシジャを呼び出します。このプロシジャは,指定時間(秒数)だけDoEventsメソッドを繰り返す以外に何もしていません(リストは省略)。これは単なる待ち時間です。実は,(7)でアクションを指定した後,(10)でShowメソッドを実行するまでの間には,少々時間が必要です。ここである程度の時間(マシンの能力に依存します)を置かないと,アクションがうまく実行されません。
次のWithステートメントでNewBalloonオブジェクトを設定し(9),(10)のShowメソッドでバルーンを表示します。
今回は,誌面の都合で割愛しましたが,バルーンに複数のボタンを表示して,クリックされたボタンによって処理を分岐したり,チェックボックスを表示し,ユーザーに項目を選択させるといった使い方もできます。
古庄 潤 |