Microsoft Excel VBA - Office アシスタントを操作する方法

◆概要

このページは、Excel VBAでOffice アシスタントを操作する方法について記載しています。

なお、Excel 2007からはOffice アシスタントは削除され、利用できません。

◆内容

Microsoft Office(以下Office)では、Officeアシスタントによって総括的なオンライン ヘルプを提供します。Officeアシスタントは、実行中の作業についてのヒントを提示したり、使用中のOfficeアプリケーションに関する疑問に答えたり、アプリケーションからのメッセージを表示したりするものです。独自に作成したVisual Basicアプリケーションでも、Officeアシスタントを使って、上表の表示や操作の案内を行うことができます。また、Officeアシスタントのバルーンで選択されたコントロールに応じて、プロシージャを実行することもできます。Officeアシスタント、バルーン、およびバルーン内のすべての要素は、Microsoft Officeオブジェクト モデルのアシスタント部分(Assistantオブジェクトとその下位要素)を使って制御します。

メモ Microsoft Access97 for Windowsのランタイム バージョンで作成したアプリケーションでは、Officeアシスタントは使用できません。

◆1.Officeアシスタントの使用

Officeアプリケーションで、ユーザーはOfficeアシスタントで使用するアシスタントの種類や、どのようなときにアシスタントが表示されるようにするかを指定します。Visual Basicアプリケーションでは、このアシスタントを表示したり、アニメーションを実行したり、アシスタントのウィンドウを画面の別の位置に移動したり、さまざまな種類の情報やコントロールを含むバルーンを表示することができます。


メモ アシスタントのアニメーションやバルーンの動作は、マクロ記録機能で記録することはできません。また、[Office アシスタント]ダイアログ ボックスで選択されたオプションを記録することもできません。


Visual Basic アプリケーションにアシスタントを組み込むときは、まず、ユーザーがどの程度アシスタントを利用するか調べます。ユーザーは、[Office アシスタント]ダイアログ ボックスの[オプション]タブで、アシスタントの配置、アシスタントが表示するヘルプ トピックの種類、F1キーが押されたときのアシスタントの応答方法などを設定します。


ユーザーが行ったアシスタントの設定を確認するには、Assistantオブジェクトのプロパティを使います。Assistantオブジェクトのプロパティは、ユーザーが設定するオプションに対応しています。たとえば、ユーザーが[Office アシスタント]ダイアログ ボックスの[オプション]タブで[[F1キーでアシスタントを表示する]を選択した場合、AssistWithHelpプロパティはTrueを返します。


ユーザーがアシスタントのヘルプを表示するように設定している場合、テキストやプロンプトをメッセージボックスまたは入力ボックスに表示する代わりに、バルーンの中に表示するようにプログラムを記述すると、アシスタントの機能を最大限に活用することができます。また、アプリケーションから自動的にヒントが送られるようにアシスタントを設定することもできます。


アシスタントには、34種類のアニメーションが用意されています。MsoAnimationTypeクラスのいずれかの定数をAssistantオブジェクトのAnimationプロパティに割り当てて、特定の状況で特定のアニメーションが表示されるようにアシスタントをプログラムすることができます。ユーザーが選択したアシスタントによっては、Animationプロパティを設定してもあまり目立った動きがない場合がありますが、MsoAnimationTypeクラスの定数はすべてのアシスタントに対して有効です。


メモ MsoAnimationTypeクラスのいずれかの定数をBalloonオブジェクトに割り当てることもできます。この場合、バルーンが表示されるときに、指定したアニメーションが実行されます。Balloonオブジェクトの詳細については、「2 Office アシスタント バルーンの使用」を参照してください。


次の例は、[Office アシスタント]ダイアログ ボックスの[オプション]タブで[エラー メッセージを表示する]オプションが選択されている場合はアシスタントにメッセージを表示し、オプションが選択されていない場合は標準のメッセージ ボックスを表示します。メッセージを表示するとき、アシスタントはアニメーションになります。また、ユーザーがバルーンを閉じると、アシスタントのVisibleプロパティに実行前の値が設定されます。

    hdng = "フィールドが空白です。"
    msg = "次に進む前に、番号を入力しなければなりません。"
    If Assistant.AssistWithAlerts = True Then
        With Assistant
            userState = .Visible
            .Visible = True
            Set bln = .NewBalloon
            With bln
                .Mode = msoModeModal
                .Button = msoButtonSetOK
                .Heading = hdng
                .Text = msg
                .Animation = msoAnimationGetAttentionMinor
                ret = .Show
            End With
            .Visible = useState
        End With
    Else
        ret = MsgBox(msg, vbOKOnly, hdng)
    End If

◆2.Office アシスタント バルーンの使用

Balloon オブジェクト(バルーンを表すオブジェクト)は、Officeアシスタントのオブジェクト モデルの中で最も重要な部分です。バルーンは、Visual Basicアプリケーションでメッセージを表示したり、情報の入力を求めるときに使います。バルーンにはさまざまな種類があり、それぞれにラベルやチェック ボックス、特定の種類のグラフィックスを入れることができます。一度に表示できるバルーンは1つだけですが、複数のBallonオブジェクトを作成して、いつでも使えるように変数に格納しておくことができます。また、プロパティを設定し直してBalloonオブジェクトを再利用することもできます。


◆3.バルーンの作成

バルーンを作成するには、AssistantオブジェクトのNewBallonプロパティを使います。このプロパティから返されるバルーンにはなにも入っていません。バルーンに見出しを追加するにはBallonオブジェクトのHeadingプロパティを使い、バルーンの本文にテキストを追加するにはTextプロパティを使います。これ以外にも、コントロールやグラフィックスを追加することができます。バルーンがユーザーの捜査に対してどのように動作するかを指定するには、Modeプロパティを使います。最後にShowメソッドを使って、作成したバルーンを表示します。Showメソッドは、その時点までに設定したプロパティに従ってバルーンを表示するので、バルーンのプロパティの設定や変更を終えた後にShowメソッドを実行するようにしてください。


表示できるバルーンにはいくつか種類があります。バルーンの種類は、BalloonオブジェクトのModeプロパティの設定によって決まります。Modeプロパティには、msoModeModal、msoModeAutoDown、msoModeModelessのいずれかのMsoModeType定数を設定します。


モーダル バルーン(msoModeModal)を使うと、バルーンが表示されている間はキーボードやマウスの操作がバルーン内に限定されるため、ユーザーの注意を完全にバルーンに向けることができます。このため、モーダル バルーンは警告や重要なメッセージの表示に適しています。次の例では、モーダル バルーンを使って、作業中のファイルへの変更を保存せずにファイルと閉じるかどうかを確認するメッセージを表示します。クリックされたボタンの値(変数 retに代入される値)によって、イベントを継続するか判断できます。この例は、ファイルを閉じるときに常に実行されるイベント プロシージャの一部として、あるいは操作の案内を行う一連のバルーンのコードの中で使うことができます。

    Set bln = Assistant.NewBalloon
    With bln
        .Mode = msoBalloonModal
        .Heading = "警告"
        .Text = "このファイルを保存しないで閉じると、" _
            & "このマクロは中断されます。保存せずに閉じてもよろしいですか?"
        .Button = msoButtonSetOkCancel
        ret = .Show
    End With

msoModeAutoDownが設定されているバルーンは、バルーン以外の場所でマウスやキーボードを操作すると、自動的に閉じられます。この種類のバルーンは、処理中の作業でそれほど重要でないメッセージを素早く表示するのに適しています。次の例は、カスタム ダイアログ ボックスの使い方についてのヒントを表示します(このコードはダイアログ ボックスコントロールのイベントプロシージャで実行されるものです)。ここではAutoDownバルーンを使っているので、ユーザーがダイアログ ボックスの任意の位置をクリックすると、メッセージは消えます。

    hdng = "データ ソースの選択"
    msg = "このダイアログ ボックスでは、" _
        & "入力データとしてブックまたは外部テーブルを選択できます。" _
        & "外部データを使う場合、フィールドは固定長でなく、" _
        & "区切り文字で区切られていなければなりません。"
    With Assistant
        Set bln = .NewBalloon
        With bln
            .Mode = msoModeAutoDown
            .Button = msoButtonSetOK
            .Heading = hdng
            ret = .Show
        End With
    End With

モードレス バルーン(msoModeModelessの場合、ユーザーはバルーンを画面に表示したまま、アプリケーションでの操作を続けることができます。つまり、文書に入力したり、メニューやツールバーコマンドを使うことができます。モードレス バルーンは、Visual Basicアプリケーションの操作に役立つヒントや手順を表示するときに使います。


モードレス バルーンのコントロールやボタンをクリックすると、"コールバック プロシージャ"が呼び出されます。Visual Basicアプリケーションでは、モードレス バルーンでのユーザー操作に応答するプロシージャを作成し、その名前をCallBackプロパティに割り当てる必要があります。たとえば、ユーザーが[OK]ボタンをクリックしたときにCloseメソッドを適用します。次の例は、一連の操作手順を示すバルーンを表示します。ユーザーが[OK]をクリックすると、コールバック プロシージャによってバルーンが閉じられます。

Public Sub DisplaySteps()
    Set bln = Assistant.NewBalloon
    With bln
        .Mode = msoModeModeless
        .Callback = "StepsCallback"
        .BalloonType = msoBalloonTypeNumbers
        .Button = msoButtonSetOK
        .Heading = "レポートを作成するには"
        .Labels(1).Text = "[ファイル] メニューの [新規レポート] をクリックします。"
        .Labels(2).Text = "[レポートの新規作成] ダイアログ ボックスで" _
            & "期間(年、四半期、月)を選択し、[作成] をクリックします。"
        ret = .Show
    End With
    
End Sub

Sub StepsCallback(bln As Balloon, btn As Long, priv As Long)
    bln.Close
    
End Sub

CallBackプロパティおよびコールバック プロシージャの詳細については、「4コールバック プロシージャの使用」を参照してください。

◆4.複数のバルーンの管理

Ballonオブジェクトのコレクションはありません。その代わり、複数のバルーン変数を格納する配列を作成することができます。配列には、空のバルーンを作成して格納することも、見出し、テキスト、コントロールを含むバルーンを作成して格納することもできます。次の例は、配列を作成し、番号付きの見出しを含む3つのBalloonオブジェクトを配列に追加します。

    Dim myBlnArray(3) As Balloon
    
    With Assistant
        For i = 1 To 3
            Set myBlnArray(i) = .NewBalloon
            myBlnArray(i).Heading = i
        Next
    End With

次の例は、配列の中の2番目のバルーンを表示します。

    myBlnArray(2).Show

配列を使用する以外にも、作成するバルーンごとに個別のオブジェクト変数を設定し、これらの変数を参照することができます。バルーン変数をグローバルに宣言すると、プログラムの任意のプロシージャからその変数を呼び出すことができます。

◆5.バルーンにテキストとコントロールを追加する

バルーンには、見出しとテキストを入れることができます。特に設定しない限り、バルーンの下には[OK]ボタンだけが表示されますが、ほかにもさまざまなボタンを組み合わせて入れることができます。また、まったくボタンを入れなくてもかまいません。ただし、ボタンを表示しないようにするには、ボタン ラベル付きのモードレス バルーンにする必要があります。ボタン ラベルについては、後の「ラベルの追加と変更」を参照してください。


強調して表示する場合や詳細を示す場合、見出しにアイコンを追加したり、バルーンのテキスト部分にビットマップ、Windowsメタファイル、またはMacintoshのPICTファイルを挿入できます。また、バルーンには、5つまでの番号付きラベル、行頭記号付きラベル、またはボタン ラベルと、5つまでのチェック ボックスを入れることができます。これらの要素は、ユーザーに対して詳細な情報を表示したり、ユーザーから情報を取得するために使用できます。


見出しとテキストの設定

バルーンの最も基本的な要素は、バルーンに表示される見出しとテキストです。見出しとテキストは省略可能なので、これらが入っていないバルーンを表示することもできます。見出しやテキストを表示するには、HeadingプロパティとTextプロパティを使います。バルーンの下に表示されるボタンを指定するには、ButtonプロパティにMsoButtonSetTypeクラスのいずれかの定数を設定します。次の例は、モーダル バルーンの中に簡単なメッセージを表示します。

   Set bln = Assistant.NewBalloon
    With bln
        .Mode = msoModeModal
        .Button = msoButtonSetYesNo
        .Heading = "ファイルが空です"
        .Text = "指定したファイルにはデータが入っていません。終了しますか。"
        .Icon = msoIconTip '警告アイコンを表示する
        .Show
    End With

Showメソッドは、バルーンを閉じるときにどのボタンがクリックされたかを示す値を返します。この戻り値を使って、次に実行する動作を決めることができます。前の例の場合、Showメソッドによってretの値がmsoBalloonButtonYesに設定されたときには、実行中のマクロが終了するように、残りのコードを記述できます。

アイコンとビットマップの追加

Office アシスタントのバルーンにアイコンやビットマップを追加して、バルーンの表示を強調できます。アイコンはバルーンの上部の、見出しの文字列の左側に表示されます。ビットマップはバルーンのどこにでも表示できます。アイコンを追加するには、Balloon オブジェクトのIcon プロパティにMsoIconTypeクラスのいずれかの定数を割り当てます。次の例は、簡単な警告のバルーンを表示します。

    Set bln = Assistant.NewBalloon
    With bln
        .Mode = msoModeModal
        .Heading = "注意"
        .Text = "このコマンドは現在使用できません。"
        .Icon = msoIconAlert
        .Show
    End With

WindowsまたはMacintoshのビットマップをバルーンに追加するには、ビットマップの種類(.bmpなど)とパスを中かっこ({})で囲んで指定します。ビットマップは、バルーンのテキスト、バルーンの見出し、またはラベルに挿入することができます。次の例は、バルーンのテキストにWindowsのビットマップ ファイルを挿入します。テキストを中かっこで囲んで表示するには、この例にあるように、開くかっこを2つ続けて({{)記述します。指定したフォルダにCircles.bmpが存在しない場合、バルーン エラーになります。バルーン エラーに対処する方法については、ヘルプの「BalloonErroプロパティ」を参照してください。

    myBmp = "{bmp c:\windows\Circles.bmp}"
    myText1 = "ビットマップの前のテキスト、"
    myText2 = "ビットマップの後のテキスト、"
    myText3 = "{{かっこ内のテキスト}"
    Set bln = Assistant.NewBalloon
    With bln
        .Mode = msoModeAutoDown
        .Heading = "ビットマップの表示テスト"
        .Text = myText1 & myBmp & myText2 & myText3
        .Show
    End With

表示するグラフィックスを指定するには、{type location sizing_factor}という構文を使います。この構文で、typeはバルーンに追加するグラフィックスの種類を指定します。lacationには絶対パスを指定する必要があり、ネットワーク上の場所(\\server\folder\picture.bmp)またはローカル ハード ディスク(C:\folder\picture.bmp)を指定できます。sizing_factorはWindowsメタファイルまたはMacintoshのピクチャの幅(文字単位)を表します(.bmpファイルは無効になります)。プロポーショナル フォントが使われている場合、sizing_factorは平均の文字幅で表されます。sizing_factorを使って、大きなグラフィックスがバルーンに収まるように縮小したり、小さなグラフィックスを拡大して表示することができます。次の例は、Clouds.wmfというWindowsメタファイルの表示サイズを20文字幅に縮小し、見出しとしてバルーンに挿入します。

    Set myBln = Assistant.NewBalloon
    myWmf = "{wmf c:\Graphics\Clouds.wmf 20}"
    With myBln
        .Mode = msoModeAutoDown
        .Heading = myWmf
        .Text = "見出しに .wmfが入ったバルーンです。"
        .Show
    End With

ラベルの追加と変更

バルーンに追加できるラベルには3種類あります。番号付きラベル、行頭記号付きラベル、およびボタンラベルです。バルーンには5つまでのラベルを追加できますが、すべて同じ種類にしなければならず、番号付きラベル、行頭記号付きラベル、ボタンラベルを同じバルーンの中で組み合わせて使うことはできません。使用するラベルの種類を指定するには、バルーンのBalloonTypeプロパティにmsoBallonTypeNumbers、msoBalloonTypeBullets、またはmsoBalloonTypeButtonsのいずれかのMsoBallonType定数を設定します。特定の番号付きラベル、行頭記号付きラベル、またはボタン付きラベルを表すBalloonLabelオブジェクトを取得するには、Labels(index)という構文を使います。引数indexには、1〜5の番号を指定します。ラベルのテキストを指定するには、BalloonLabelオブジェクトのTextプロパティを設定します。


番号付きラベルと行頭記号付きラベルを使うと、関連する情報をわかりやすく表示することができます。この場合、長い文をバルーンのTextプロパティに割り当てる代わりに、簡単な文や語句を5つまで番号付きまたは行頭記号付きのラベルのTextプロパティに割り当てます。次の例は、マクロのトラブルシューティング用のヒントの一覧が入ったモーダルバルーンを表示します。

    Set bln = Assistant.NewBalloon
    With bln
        .Mode = msoballoonmodal
        .Button = msoButtonSetOK
        .BalloonType = msoballoontypebuleets
        .Heading = "ヒント"
        .Text = "出力ログが見つからないときは、次のことを確認してください。"
        .Labels(1).Text = "保存先のフォルダを正しく指定したか"
        .Labels(2).Text = "入力したファイル名は正しいか"
        .Labels(3).Text = "ファイルが空でなかったか(この場合 ログは作成されません)"
        ret = .Show
    End With

ボタンラベルは、複数の動作の一覧から1つの項目を選ぶときに使います。Showプロパティの戻り値(モーダルまたはAutoDownバルーンの場合)またはコールバック プロシージャに渡される2番目の引数(モードレス バルーンの場合)を使うと、どのボタン ラベルがクリックされたかを判断して、適切な動作を実行する事ができます。


次の例は、3つのボタン ラベルを表示します。xにはShowメソッドの戻り値が設定され、ユーザーがクリックするボタンによって 1、2、3のいずれかの値になります(このバルーンに[OK]ボタンはありません)。この例ではxの値をメッセージボックスに表示していますが、xの値を別のプロシージャに渡したり、Select Caseステートメントの中で使用することもできます。

    Set b = Assistant.NewBalloon
    With b
        .Mode = msoModeModal
        .Button = msoButtonSetNone
        .Heading = "バルーンの見出し"
        .Text = "いずれか1つを選択してください。"
        .Labels(1).Text = "選択 1"
        .Labels(2).Text = "選択 2"
        .Labels(3).Text = "選択 3"
        x = .Show
    End With

次の例では、文書を印刷する前に、ネットワーク プリンタとローカル プリンタのどちらを使用するかユーザーが選択するようにします。このバルーンはモードレス バルーンなので、表示される間もユーザーはアプリケーションの操作を続けることができます。ただし、このバルーンでプリンタを選択するまでは印刷が実行されず、バルーンは選択待ちの状態になっています。ProcessPrintプロシージャでは、どちらのボタン ラベルがクリックされたかを判断し、適切なステートメントを実行してからバルーンを閉じるなどの処理を行います。

    Set bln = Assistant.NewBalloon
    With bln
        .Mode = msoModeModeless
        .Button = msoButtonSetNone
        .Heading = "プリンタの選択"
        .Text = "印刷する前に、プリンタを選択してください。"
        .Icon = msoIconAlert
        .Labels(1).Text = "ネットワーク プリンタ"
        .Labels(2).Text = "ローカル プリンタ"
        .Callback = "ProcessPrinter"
        ret = .Show
    End With

モードレス バルーンのCallbackプロパティの詳細については、「9.2.4 コールバック プロシージャの使用」を参照してください。

チェック ボックスの追加と変更

チェック ボックスは、一覧から1つまたは複数の項目を選ぶときに使います。特に設定しない限り、作成したバルーンには5つのチェック ボックスがありますが、Textプロパティを設定しないとチェック ボックスは表示されません。特定のチェック ボックスを表すBalloonCheckboxオブジェクトを取得するには、Checkboxes(index)という構文を使います。引数indexには、1〜5の番号を指定します。


メモ 5より大きい番号のチェックボックスを参照しようとするとエラーになります。


チェック ボックスの入ったバルーンでは、ユーザーはボタンをクリックする前に1つまたは複数のチェック ボックスを選ぶことができます。この各チェック ボックスの値(Checkedプロパティで取得できます。)を使って、それ以降のステートメントを制御したり、コードを分岐させることができます。次の例は、3つのチェック ボックスが入ったバルーンを表示します。ユーザーは、任意の数のチェック ボックスを選ぶことができ、1つも選ばないこともできます。2番目のバルーンで、どのチェックボックスが選ばれたかをユーザーに対して確認します。

    Set a = Assistant.NewBalloon
    Set b = Assistant.NewBalloon
    With a
        .Mode = msoModeModal
        .Button = msoButtonSetOkCancel
        .Heading = "部門別売り上げデータの印刷"
        .Text = "売り上げデータを印刷する部門を選択してください。"
        For i = 1 To 3
            .CheckBoxes(i).Text = "部門 " & i
        Next
    End With
    retA = a.Show
    If retA = msoBalloonButtonOK Then
        s = ""
        For i = 1 To 3
            If a.CheckBoxes(i).Checked = True Then
                If s = "" Then
                    s = CStr(i)
                Else
                    s = s & "," & CStr(i)
                End If
            End If
        Next
        With b
            .Mode = msoModeModal
            .Heading = "部門別売り上げデータの印刷"
            If s <> "" Then
                .Button = msoButtonSetYesNo
                .Text = "売り上げデータを印刷するのは、" & _
                    "次の部門でよろしいですか: 部門" & s
            Else
                .Button = msoButtonSetOK
                .Text = "部門が選択されませんでした。"
            End If
            retB = .Show
        End With
    End If

◆6.コールバックプロシージャの使用

モードレス バルーンを作成した場合、Callbackプロパティにコールバック プロシージャの名前を割り当てなければなりません。コールバック プロシージャは、次の3つの引数をとるように記述します。最初の引数は、プロシージャを呼び出したバルーンを表すBalloonオブジェクトです。2番目の引数は、クリックされたボタンラベルまたはボタンを示すインデックス数値です(カスタム ウィザードを作成していない場合、3番目の引数は無視することができます)。次の例では、コールバック プロシージャの有効な宣言のしかたを示しています。宣言の中ではどのような引数名でも使えることに注意してください。

Sub MyCallback(bln As Balloon, btn As Long, priv As Long)

メモ プロシージャを直接呼び出すステートメントを記述する場合と同じように、Callbackプロパティにコールバック プロシージャを割り当てる場合も、コードを記述している場所を基準にして、コールバック プロシージャの正しい適用範囲(スコープ)を示す文字列を指定しなければなりません。たとえば、あるモジュールでコードを記述していて、コールバック プロシージャが同じプロジェクト内のExcelのワークシートにある場合、Callbackプロパティには "sheet1.Mycallback"などと設定します。


次の例は、3つのプリンタ名が入ったバルーンを表示します。コールバック プロシージャを使って、プリンタごとに適切なコードを実行してからバルーンを閉じます。

sub TestCallback()
    Set bln = Assistant.NewBalloon
    With bln
        .Mode = msoModeModeless
        .Callback = "ProcessPrinter"
        .Button = msoButtonSetNone
        .BalloonType = msoBalloonTypeButtons
        .Heading = "プリンタの選択"
        .Labels(1).Text = "ネットワーク プリンタ"
        .Labels(2).Text = "ローカル プリンタ"
        .Labels(3).Text = "ローカル カラー プリンタ"
        .Show
    End With
End Sub

Sub ProcessPrinter(bln As Balloon, ibtn As Long, iPriv As Long)
    Assistant.Animation = msoAnimationPrinting
    Select Case ibtn
    Case 1
        'プリンタごとの適切なコードを記述します。
    Case 2
        'プリンタごとの適切なコードを記述します。
    Case 3
        'プリンタごとの適切なコードを記述します。
    End Select
    bln.Close
    
End Sub



▼ページトップへ