WebBrowser コントロールを使用して Office ドキュメントを開く方法

概要

Visual Basic で直接 Office ドキュメントを表示して作業するときに、OLE コンテナ コントロールを使用して埋め込み OLE オブジェクトを作成するのではなく、既存のドキュメントへのリンクを作成してそのドキュメントを埋め込み ActiveX ドキュメント オブジェクトとして表示する必要がある場合、Microsoft WebBrowser コントロールを使用して問題を解決することができます。



この資料では、WebBrowser コントロールを使用して、既存の Office ドキュメントを Visual Basic で表示する方法について説明します。

詳細

ActiveX ドキュメントは埋め込み可能な OLE オブジェクトで、その動作は従来の OLE オブジェクトよりも ActiveX コントロールに似ています。通常の埋め込みオブジェクトとは異なり、ActiveX ドキュメントは大規模なドキュメントに含めるためのオブジェクトとしては設計されていません。単に Internet Explorer などのビューアで表示されるか、他のドキュメントと共に単一のリソース (バインダー ファイルなど) に連結される、それ自体で完結したドキュメントと見なされます。



現在の Microsoft Visual Basic では、ActiveX ドキュメントを直接ホストすることはサポートされていませんが、Internet Explorer と WebBrowser コントロールを使用すると、この制約を回避できます。ただし、WebBrowser コントロール (Shdocvw.dll) は Internet Explorer の一部なので、Internet Explorer がインストールされているシステムでのみ使用することができます。

Office ドキュメントを表示する Visual Basic アプリケーションを作成する

Office ドキュメントを表示する Visual Basic アプリケーションを作成するには、次の手順を実行します。

  1. Visual Basic を起動し、新規の標準 EXE プロジェクトを作成します。デフォルトで Form1 が作成されます。

  2. [プロジェクト] メニューの [コンポーネント] をクリックして、[コンポーネント] ダイアログ ボックスを開きます。[コンポーネント] ダイアログ ボックスで [Microsoft Common Dialog Control] と [Microsoft Internet Controls] チェック ボックスをオンにします。[OK] をクリックすると、これらの項目がツールボックスに追加されます。

  3. Form1 に、WebBrowser コントロール、CommonDialog コントロール、および CommandButton のインスタンスを追加します。

  4. 次のコードを Form1 のコード ウィンドウに追加します。

    Option Explicit

    Dim oDocument As Object

    Private Sub Command1_Click()
    Dim sFileName As String

    ' Find an Office file...
    With CommonDialog1
    .FileName = ""
    .ShowOpen
    sFileName = .FileName
    End With

    ' If the user didn't cancel, open the file...
    If Len(sFileName) Then
    Set oDocument = Nothing
    WebBrowser1.Navigate sFileName
    End If
    End Sub

    Private Sub Form_Load()
    Command1.Caption = "Browse"
    ' For the 2007 Microsoft Office documents, change the .Filter parameter of the
    ' With CommonDialog1 statement to:
    ' .Filter = "Office Documents " & _
    ' "(*.docx, *.xlsx, *.pptx)|*.docx;*.xlsx;*.pptx"
    With CommonDialog1
    .Filter = "Office Documents " & _
    "(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt"
    .FilterIndex = 1
    .Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly
    End With
    End Sub

    Private Sub Form_Unload(Cancel As Integer)
    Set oDocument = Nothing
    End Sub

    Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, _
    URL As Variant)
    On Error Resume Next
    Set oDocument = pDisp.Document

    MsgBox "File opened by: " & oDocument.Application.Name
    End Sub
  5. F5 キーを押してプロジェクトを実行します。[Browse] をクリックすると、[ファイルを開く] ダイアログ ボックスが表示され、表示する Word、Excel、または PowerPoint ファイルの指定を要求されます。ファイルを指定して [開く] をクリックすると、WebBrowser コントロール内に指定したドキュメントが表示されます。この後、そのドキュメントを開いた Office アプリケーション名が、メッセージ ボックスに表示されます。

WebBrowser コントロールを 2007 Microsoft Office プログラムで使用する際の注意

WebBrowser コントロールを使用する際には以下の点に注意してください。

  • WebBrowser コントロールは非同期でドキュメントを参照します。これは、WebBrowser1.Navigate を呼び出すと、ドキュメントが完全に読み込まれる前に、Visual Basic アプリケーションにドキュメントの制御が戻ることを意味します。読み込まれるドキュメントをオートメーションで起動する場合は、NavigateComplete2 イベントを使用して、ドキュメントの読み込みの完了が通知されるようにする必要があります。Office ドキュメント オブジェクトへの参照を取得するには、WebBrowser オブジェクトの Document プロパティを使用します。上記のコードでは、この参照が "oDocument" に設定されています。

  • 1 つのプロジェクト内で複数の WebBrowser コントロールを使用する場合、各コントロールに同じ種類の Office ドキュメント (すべて Word 文書、すべて Excel ワークシートなど) を読み込むと、いくつかの問題が発生することが確認されています。そのため、1 つのプロジェクトに使用するコントロールは 1 つとし、一度に表示するドキュメントも 1 つとすることをお勧めします。

  • WebBrowser コントロールに表示されているコンテンツを消去するには、別のコマンド ボタンの Click イベント (またはコード内のその他適当な場所) で、以下のコードを使用してデフォルトの空白ページを参照します。
       WebBrowser1.Navigate "about:blank"

WebBrowser コントロールを Microsoft Office 2003 プログラムおよびそれ以前のバージョンの Office で使用する際の注意

WebBrowser コントロールを使用する際には以下の点に注意してください。

  • WebBrowser コントロールは非同期でドキュメントを参照します。これは、WebBrowser1.Navigate を呼び出すと、ドキュメントが完全に読み込まれる前に、Visual Basic アプリケーションにドキュメントの制御が戻ることを意味します。読み込まれるドキュメントをオートメーションで起動する場合は、NavigateComplete2 イベントを使用して、ドキュメントの読み込みが完了したことを通知されるようにする必要があります。Office ドキュメント オブジェクトへの参照を取得するには、渡された WebBrowser オブジェクトの Document プロパティを使用します。上記のコードでは、このプロパティが "oDocument" に設定されています。

  • WebBrowser コントロールでは、メニューのマージはサポートされていません。Visual Basic のメニューに、ドキュメントのメニュー項目を表示する必要がある場合は、WebBrowser コントロールではなく、OLE コンテナ コントロールを使用します。

  • 通常、WebBrowser コントロールでは、Office ドキュメントを表示する前に、ドッキング ツール バーが非表示に設定されます。オートメーションを使用して、ドキュメントにフリー ツール バーを表示するには、次のようなコードを使用します。

       With oDocument.Application.CommandBars("Standard")
    .Position = 4 '[msoBarFloating]
    .Visible = True
    End With
    Internet Explorer 5.0 以降では、次のコードを使用してドッキング ツール バーを表示することができます。

     ' This is a toggle option, so call it once to show the 
    ' toolbars and once to hide them. This works with Internet Explorer 5
    ' but often fails to work properly with earlier versions...
    WebBrowser1.ExecWB OLECMDID_HIDETOOLBARS, OLECMDEXECOPT_DONTPROMPTUSER
  • 1 つのプロジェクト内で複数の WebBrowser コントロールを使用する場合、各コントロールに同じ種類の Office ドキュメント (すべて Word 文書、すべて Excel ワークシートなど) を読み込むと、いくつかの問題が発生することが確認されています。そのため、1 つのプロジェクトに使用するコントロールは 1 つとし、一度に表示するドキュメントも 1 つとすることをお勧めします。



    最も一般的なのは、Office コマンド バーが無効になっているように見えるという問題です。同一のフォームに WebBrowser コントロールが 2 つあり、その両方で Word 文書を読み込む場合に、上記の方法のいずれかを使用してツール バーを表示すると、片方のツール バーのセットのみが有効になり、正しく機能します。もう一方は無効になり、使用できません。

  • WebBrowser コントロールに表示されているコンテンツを消去するには、別のコマンド ボタンの Click イベント (またはコード内のその他適当な場所) で、以下のコードを使用してデフォルトの空白ページを参照します。

       WebBrowser1.Navigate "about:blank"

関連情報

Visual Basic の WebBrowser コントロールの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。


162719 Visual Basic 5.0 から WebBrowser コントロールを使用する方法


188271 VB から Web Browser コントロールの内容を印刷する方法
191692 [PRB] ディストリビューション ウィザードで作成したセットアップ パッケージに Shdocvw.dll が含まれない
238313 [PRB] Visual Basic から Internet Explorer のドキュメント オブジェクト モデルにアクセスする
プロパティ

文書番号:243058 - 最終更新日: 2007/06/14 - リビジョン: 1

フィードバック