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

この記事の Microsoft Visual C# 2005 および Microsoft Visual C# .NET バージョンについては、 304662を参照してください。

概要

Microsoft Office ドキュメントを Microsoft Visual Basic フォームに直接表示したり、埋め込んだりすることもできます。 Microsoft Visual Basic 2005 および Visual Basic .NET では、Office ドキュメントをフォームに埋め込むことができる OLE コントロールは提供されません。 既存のドキュメントを埋め込んで、Visual Basic フォーム内のインプレース ActiveX ドキュメント オブジェクトとして開く場合は、WebBrowser コントロールを使用することをお勧めします。

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

詳細情報

ActiveX ドキュメントは、従来の OLE オブジェクトよりも ActiveX コントロールのように動作する埋め込み可能な OLE オブジェクトです。 従来の埋め込みオブジェクトとは異なり、ActiveX ドキュメントは、より大きなドキュメント内の包含オブジェクトとして設計されていません。 代わりに、それ自体が単に表示されている (Microsoft Internet Explorer など) 完全なドキュメントと見なされるか、他のドキュメント (Microsoft Office バインダー ファイルなど) を含む単一のリソースで収集されます。 WebBrowser コントロールでホストされている ActiveX ドキュメントは常にアクティブです。そのため、従来の OLE 埋め込みオブジェクトとは異なり、インプレース アクティブ化の意味はありません。

Microsoft Visual Basic .NET および Visual Basic 2005 は現在、ActiveX ドキュメントの直接のホストをサポートしていませんが、この目的で WebBrowser コントロールを使用できます。 WebBrowser コントロール (Shdocvw.dll) は Internet Explorer の一部であり、Internet Explorer がインストールされているシステムでのみ使用できます。

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

注:

上記の 2 つの方法を使用して Office ドキュメントを開く Visual Basic アプリケーションを作成する場合は、Visual Studio 2005 でコードを変更する必要があります。 既定では、Visual Basic では、Windows フォーム プロジェクトを作成するときに、1 つのフォームがプロジェクトに追加されます。 フォームは Form1 という名前です。 フォームを表す 2 つのファイルは、Form1.vb と Form1.designer.vb という名前です。 Form1.vb でコードを記述します。 Form1.designer.vb ファイルは、Windows フォーム デザイナーがツールボックスからコントロールをドラッグ アンド ドロップすることによって実行したすべてのアクションを実装するコードを記述する場所です。

Visual Basic アプリケーションが作成されたら、F5 キーを押してプロジェクトを実行します。 [参照] をクリックすると、[開く] ダイアログ ボックスが表示され、Word、Excel、または PowerPoint ファイルを参照できます。 任意のファイルを選択し、[ 開く] をクリックします。 ドキュメントが WebBrowser コントロール内で開き、Office ドキュメント サーバーの名前を表示するメッセージ ボックスが表示されます

方法 1

  1. Microsoft Visual Studio 2005 または Microsoft Visual Studio .NET で、Visual Basic 2005 または Visual Basic .NET を使用して Windows アプリケーション プロジェクトを作成します。 Form1 は既定で作成されます。

  2. [ ツール ] メニューの [ ツール ボックスのカスタマイズ] をクリックして、[ ツール ボックスのカスタマイズ] ダイアログ ボックスを開きます。 [ COM コンポーネント ] タブで、 Microsoft WebBrowser への参照を追加します。 [OK] をクリックして、WebBrowser コントロールをWindows フォーム ツールボックスに追加します。 WebBrowser コントロールは、ツールボックスのテキスト エクスプローラー と共に表示されます。

    メモ Visual Studio 2005 では、手順 2. を実行する必要はありません。

  3. ツールボックスを使用して、WebBrowser コントロール、OpenFileDialog コントロール、および Button コントロールを Form1 に追加します。 この手順では、AxWebBrowser1 メンバー変数、OpenFileDialog1 メンバー変数、Button1 メンバー変数を Form1 クラスに追加します。

  4. 次のように、Form1 クラスでプライベート メンバーを定義します。

    Dim oDocument as Object
    
  5. Form1 クラスに次のコードを貼り付けます。

    Private Sub Button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Button1.Click
    
    Dim strFileName As String
    
    'Find the Office document.
        With OpenFileDialog1
            .FileName = ""
            .ShowDialog()
            strFileName = .FileName
        End With
    
    'If the user does not cancel, open the document.
        If strFileName.Length Then
            oDocument = Nothing
            AxWebBrowser1.Navigate(strFileName)
        End If
    
    End Sub
    
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As _
       System.EventArgs) Handles MyBase.Load
    
    Button1.Text = "Browse"
    
    With OpenFileDialog1
            .Filter = "Office Documents " & _
            "(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt"
            .FilterIndex = 1
        End With
    
    End Sub
    
    Private Sub Form1_Closing(ByVal sender As Object, ByVal e As _
       System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    
    oDocument = Nothing
    
    End Sub
    
    Private Sub AxWebBrowser1_NavigateComplete2(ByVal sender As Object, _
       ByVal e As AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event) _
       Handles AxWebBrowser1.NavigateComplete2
    
    On Error Resume Next
    
    oDocument = e.pDisp.Document
    
    'Note: You can use the reference to the document object to
        '      automate the document server.
        MsgBox("File opened by: " & oDocument.Application.Name)
    
    End Sub
    

方法 2

  1. Microsoft Visual Studio 2005 または Microsoft Visual Studio .NET で、Visual Basic 2005 または Visual Basic .NET を使用して Windows アプリケーション プロジェクトを作成します。 Form1 は既定で作成されます。

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

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

  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
    

WebBrowser コントロールを使用する場合の考慮事項

WebBrowser コントロールを使用する場合は、次のことを考慮する必要があります。

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

  • WebBrowser コントロールでは、メニューのマージはサポートされていません。

  • WebBrowser コントロールは、通常、Office ドキュメントを表示する前に、ドッキングされているツール バーを非表示にします。 Automation を使用すると、次のようなコードを使用してフローティング ツール バーを表示できます。

    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...
    AxWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER)
    
  • 1 つのプロジェクトに複数の WebBrowser コントロールがあり、各コントロールに同じ種類の Office ドキュメント (つまり、すべての Word ドキュメント、またはすべての Excel スプレッドシート) が読み込まれるという既知の問題がいくつかあります。 プロジェクトごとに 1 つのコントロールのみを使用し、一度に 1 つのドキュメントを参照することをお勧めします。

    最も一般的な問題は、Office コマンド バーが無効になっているように見える場合です。 同じフォームに 2 つの WebBrowser コントロールがあり、両方とも Word ドキュメントが読み込まれ、前の手法のいずれかを使用してツール バーを表示した場合、ツール バーのセットは 1 つだけアクティブになり、正しく動作します。 もう 1 つは無効になっており、使用できません。

  • 現在の内容の WebBrowser をクリアするには、別のコマンド ボタンの Click イベント (またはコード内の他の適切な場所) で、次のコードを使用して既定の空白ページを参照します。

       AxWebBrowser1.Navigate("about:blank")
    

WebBrowser コントロールを 2007 Microsoft Office プログラムと共に使用する場合の考慮事項

既定では、2007 Office プログラムは Web ブラウザーで Office ドキュメントを開けません。 この動作は、WebBrowser コントロールにも影響します。 2007 Office ドキュメントを開くアプリケーションを開発するときは、WebBrowser コントロールの代わりにカスタム ActiveX ドキュメント コンテナーを使用することをお勧めします。

WebBrowser コントロールとの下位互換性を必要とする既存のアプリケーションの場合は、Internet Explorer を構成するようにレジストリを変更できます。 この方法を使用すると、Web ブラウザーで 2007 Office ドキュメントを開く Internet Explorer を構成できます。 詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を表示してください。

927009 Windows Internet Explorer 7 で 2007 Microsoft Office プログラム ドキュメントを表示しようとすると、新しいウィンドウが開きます

メモ サポート技術情報の記事927009に記載されているメソッドを使用してレジストリを変更した場合、変更はアプリケーションで使用する WebBrowser コントロールに影響します。 この変更は、Internet Explorer のすべてのインスタンスにも影響します。 さらに、このメソッドは、今後のバージョンの Microsoft Office スイートでは機能しない可能性があります。 そのため、既存のアプリケーションとの互換性のためにのみ、このメソッドを使用することをお勧めします。

関連情報

WebBrowser コントロールを使用する方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を表示してください。

304562 Visual Studio 2005 と Visual Studio .NET では、Windows フォームの OLE コンテナー コントロールが提供されません

927009 Windows Internet Explorer 7 で 2007 Microsoft Office プログラム ドキュメントを表示しようとすると、新しいウィンドウが開きます