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

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

概要

Microsoft Visual Basic 形式で直接 Microsoft Office ドキュメントを表示したり、埋め込んだりすることができます。 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 バインダーファイルなど) を使用して1つのリソースで収集されたドキュメントであると見なされます。 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 でコードを変更する必要があります。 既定では、Windows フォームプロジェクトを作成すると、Visual Basic によってプロジェクトにフォームが1つ追加されます。 Form には、Form1 という名前が付けられます。 フォームを表す2つのファイルの名前は、Form1 および Form1 という名前です。 Form1 にコードを記述します。 Form1 ファイルには、ツールボックスからコントロールをドラッグアンドドロップすることによって実行したすべてのアクションを実装するコードが、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 コモンダイアログコントロールおよび Microsoft インターネットコントロールへの参照を追加します。 [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 を呼び出すと、ドキュメントが完全に読み込まれる前に、Visual Basic アプリケーションに制御が戻ります。 含まれているドキュメントの自動化を計画している場合は、NavigateComplete2 イベントを使用して、ドキュメントの読み込みが完了したときに通知されるようにする必要があります。 Office document オブジェクトへの参照を取得するには、渡された WebBrowser オブジェクトの Document プロパティを使用します。これは、上記のコードでは、oDocument に設定されています。

  • WebBrowser コントロールは、メニューの結合をサポートしていません。

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

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

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

       AxWebBrowser1.Navigate("about:blank")
    

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

既定では、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 スイートの今後のバージョンでは機能しない場合があります。 そのため、この方法は既存のアプリケーションとの互換性のためにのみ使用することをお勧めします。

References

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

304562 visual studio 2005 と visual studio .net は、Windows フォーム用の OLE コンテナーコントロールを提供しません。

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