Share via


Office ソリューションの実行時エラーのトラブルシューティング

更新 : 2010 年 9 月

Visual Studio で作成した Office ソリューションで実行時に次のタスクを実行すると問題が発生することがあります。

  • ソリューションのインストール

  • ソリューションの読み込みまたは実行

  • ソリューションの特定のプロパティ、メソッド、およびイベントの使用

  • UI のカスタマイズ

  • コントロールへのデータのバインディングおよびデータのキャッシュ

  • ServerDocument クラスの使用

ソリューションのインストール

Office ソリューションのインストール時またはアンインストール時にスローされたすべての例外のメッセージは、Visual Studio Tools for Office Runtime によって Windows のイベント ビューアーに書き込まれます。 これらのメッセージを使用して、インストールと配置の問題を解決できます。 詳細については、「Office ソリューションのイベント ログ」を参照してください。

Office ソリューションのインストール時に、次のエラーが発生する場合があります。

[COM アドイン] ダイアログ ボックスを使用してアドインをインストールできない

Office アプリケーションの [COM アドイン] ダイアログ ボックスを使用して、Visual Studio の Office 開発者ツールを使用して作成したアドインをインストールしようとすると、次のエラーが表示されます。

"<アドイン名>.dll は有効な Office アドインではありません。"

[COM アドイン] ダイアログ ボックスでは、Visual Studio の Office 開発者ツールを使用して作成したアドインはインストールできません。 代わりに、以下のいずれかを実行します。

  • 開発用コンピューターでアドインを実行する場合は、プロジェクトをビルドしてから、Office アプリケーションを起動します。 アドインは自動的に読み込まれます。 または、Visual Studio の [デバッグ] メニューの [デバッグなしで開始] をクリックします。 詳細については、「Office ソリューション ビルド処理の概要」を参照してください。

  • 開発用コンピューターでアドインをデバッグする場合は、F5 キーを押すか、Visual Studio の [デバッグ] メニューの [デバッグ開始] をクリックします。 詳細については、「アプリケーション レベルのプロジェクトのデバッグ」を参照してください。

  • エンド ユーザーのコンピューターにアドインをインストールする場合は、ClickOnce または Windows インストーラーを使用して、アドインを配置します。 詳細については、「Office ソリューションの配置」を参照してください。

ソリューションは正常にインストールされたが、イベント ビューアーに FrameworkVersionMismatchException が報告される

Visual Studio を使用して作成した Office ソリューションをインストールすると、Microsoft.VisualStudio.Tools.Applications.Deloyment.FrameworkVersionMismatchException がスローされたことを示すエラーがイベント ビューアーに表示される場合があります。 この例外はソリューションの実際のエラーを示しているわけではないため、通常は無視できます。

.NET Framework 3.5 と .NET Framework 4 の両方がインストールされているコンピューターに .NET Framework 4 を対象とする Office ソリューションをインストールすると、この例外がスローされ、Visual Studio Tools for Office Runtime によって内部的にキャッチされます。 Visual Studio Tools for Office Runtime では、この例外を使用して、ソリューションのために読み込む共通言語ランタイム (CLR) のバージョンを決定します。

ソリューションの読み込みまたは実行

Visual Studio Tools for Office Runtime では、起動時に発生するすべてのエラーをログ ファイルに書き込んだり、エラーが発生するたびにメッセージ ボックスに表示したりできます。 既定では、これらのオプションはオフになっています。 オプションを有効にするには、環境変数を作成します。 詳細については、「ドキュメント レベルのプロジェクトのデバッグ」および「アプリケーション レベルのプロジェクトのデバッグ」を参照してください。

Office ソリューションの読み込みまたは実行時に、次のエラーが発生する場合があります。

共通言語ランタイムまたは Microsoft .NET Framework が読み込まれない

エンド ユーザーのコンピューターに、ソリューションが対象とする .NET Framework のバージョンがインストールされている必要があります。 Office ソリューションの対象に設定できる .NET Framework のバージョンの詳細については、「Office ソリューションのデザインと作成」を参照してください。

アセンブリが見つからないか、または読み込むことができない

この問題が発生した場合、次のエラー メッセージが表示されます。

"カスタマイズ アセンブリが見つからないか、読み込めませんでした。 ただし、ドキュメントを編集、保存することはできます。 詳細については管理者、またはこのドキュメントの作成者に問い合わせてください。"

このエラーを解決するには、次の方法を試してください。

  • ユーザーがアセンブリ位置にアクセスできること、また、指名したアセンブリが存在していることを確認します。 詳細については、「Office ソリューションのアセンブリの概要」を参照してください。

  • アセンブリがある場合は、Word または Excel が .NET Framework 1.1 を明示的に読み込むカスタマイズ (アドイン、スマート タグ、スマート ドキュメントなど) を実行中でないかどうかを確認します。 この問題を解決するには、.NET Framework 1.1 を明示的に読み込むカスタマイズを無効にします。 このバージョンの .NET Framework は、それ以降のバージョンの .NET Framework と同じアプリケーション プロセスで読み込むことはできません。 詳細については、「インプロセスの side-by-side 実行」を参照してください。

    注意

    スマート タグは、Excel 2010 および Word 2010 では使用されていません。 詳細については、「スマート タグの概要」を参照してください。

  • カスタマイズ アセンブリの未処理の例外がアセンブリの読み込みを妨げていないかどうかを確認します。 デバッガーを共通言語ランタイム例外で中断するように設定するか、[オプション] ダイアログ ボックスで [例外が AppDomain またはマネージ/ネイティブの境界を越える場合にブレークする (マネージのみ)] オプションを選択して、ソリューションをデバッグします。 詳細については、「方法 : Office プロジェクトのエラーを処理する」を参照してください。

  • Visual Studio Tools for Office Runtime で詳細なエラー メッセージを表示し、すべてのアクションをログ ファイルに書き込む環境変数を設定することにより、トラブルシューティングの追加情報を取得できます。 詳細については、「ドキュメント レベルのプロジェクトのデバッグ」および「アプリケーション レベルのプロジェクトのデバッグ」を参照してください。

アドインが読み込まれない、または使用不可である

アプリケーション レベルのアドインが正常に読み込まれない場合に確認する点としては、以下が考えられます。

  • Microsoft Office アプリケーションが予期せずに終了したり、アドインの初期化中にエラーが発生したりする場合は、アドインが使用不可になっている可能性があります。 詳細については、「方法 : 無効にされたアドインを再度有効にする」を参照してください。

  • Microsoft Office アプリケーションが .NET Framework 1.1 を明示的に読み込むアドインを実行している可能性があります。 この問題を解決するには、.NET Framework 1.1 を明示的に読み込むアドインを無効にします。 このバージョンの .NET Framework は、それ以降のバージョンの .NET Framework と同じアプリケーション プロセスで読み込むことはできません。 詳細については、「インプロセスの side-by-side 実行」を参照してください。

  • Visual Studio Tools for Office Runtime で詳細なエラー メッセージを表示し、すべてのアクションをログ ファイルに書き込む環境変数を設定することにより、トラブルシューティングの追加情報を取得できます。 詳細については、「アプリケーション レベルのプロジェクトのデバッグ」を参照してください。

型を読み込むことができない

この問題が発生した場合、次のエラー メッセージが表示されます。

"アセンブリ 'assemblyname' から型 'projectname' を読み込めませんでした。"

Office プロジェクトのコードを難読化した場合に、このメッセージが表示されることがあります。 コードを難読化すると、すべてのクラスの名前が変更されます。 ただし、マニフェストでは元のクラス名が参照されており、難読化ツールではマニフェストは変更されません。

このエラーを回避するには、プロジェクトで生成されたクラスの名前を、難読化ツールの名前変更対象外クラスのリストに追加します。

Office ドキュメントはエラーなしに開くが、コードが実行されない

コードが実行されず、エラー メッセージが表示されない原因として、以下のことが考えられます。

  • Office プライマリ相互運用機能アセンブリ (PIA) がグローバル アセンブリ キャッシュにインストールされていません。これは、.NET Framework がコンピューターにインストールされていないか、Office のセットアップ時に PIA がインストールされなかったためです。

  • 同じコンピューターの Visual Studio で Word 文書プロジェクトが開いています。 Visual Studio を閉じ、文書を再度開きます。

詳細については、「ドキュメント レベルのプロジェクトのデバッグ」を参照してください。

ソリューションの特定のプロパティ、メソッド、およびイベントの使用

Microsoft Office プライマリ相互運用機能アセンブリ (PIA) および Visual Studio Tools for Office Runtime の特定のプロパティ、メソッド、およびイベントに関連する次の問題が発生することがあります。

Word で文書が開かれたときに DocumentChange イベントが発生しない

アクティブ文書が変更されると、DocumentChange イベントが発生します。 多くの場合、文書が開かれるときにもこのイベントが発生します。 ただし、Word で文書を開くにはいろいろな方法 (コマンド ライン、Windows エクスプローラー、Word の [ファイル] メニューなど) があるため、文書を開いても DocumentChange イベントが発生しないことがあります。 アクティブ文書を開いた後で変更したときは、DocumentChange イベントが必ず発生する必要があります。 文書が開かれるときにアクションを実行する場合は、Startup イベントを使用します。

Internet Explorer と Excel で Excel のイベントの発生順序が異なる

Internet Explorer 内でブックがホストされている場合、同じブックを Excel で開いた場合とは異なる順序でイベントが発生します。 また、イベントによっては 2 回発生する場合もあります。 ソリューションに Internet Explorer が含まれる場合は、異なるイベント シーケンスがソリューションの操作にどのように影響するかテストする必要があります。

テンプレートから文書を作成したときに New イベントが発生しない

コマンド プロンプトを使用して Word テンプレートを開き新しい文書を作成する場合、New イベントを発生させるには、/z スイッチを使用する必要があります。 /z の後にはスペースを挿入しないでください。スペースを挿入すると、テンプレートをベースとする新規文書を作成するのではなく、編集用テンプレートが開かれます。 例 : winword.exe /z"mytemplate.dot"

これは /t スイッチの使い方によく似ていますが、/z はさらに New イベントを発生させます。

XML ワークシートを開いたときに Open イベントが発生しない

既存の非ネイティブ ワークシート (Excel XML 形式など) をベースとする Excel プロジェクトの場合、ワークシートを開いても Open イベントは発生しません。

BeforeClose メソッドが実行されているのにユーザーが Workbook を終了しない

BeforeClose イベント ハンドラーが呼び出された後、エンド ユーザーがブックの終了操作をキャンセルしてソリューションの使用を継続する場合があります。 これは、ユーザーがワークシートに変更を行い、その後、変更を保存せずにブックを終了するアクションを実行した場合に発生します。 BeforeClose イベント ハンドラーが呼び出され、終了操作をキャンセルするオプションが表示されたダイアログ ボックスがユーザーに提示されます。

BeforeClose イベント ハンドラーにデータベース接続を終了したりクリーンアップ アクションを実行したりするコードを記述すると、ユーザーがまだソリューションを操作しているのにそのコードが呼び出される可能性があります。

[名前を付けて保存] ダイアログの Cancel パラメーターを設定すると不正な警告または Word の予期しない終了が発生する

DocumentBeforeSave イベントのイベント ハンドラーから SaveAs ダイアログ ボックスを表示し、Cancel パラメーターを false に設定すると、アプリケーションが予期せずに終了することがあります。 Cancel パラメーターを true に設定すると、自動保存が無効になっているというエラー メッセージが表示されます。

Close メソッドによって Word および Excel で予期しない終了が発生する

文書またはブックの Close メソッドをモードレス フォームから呼び出すと、アプリケーションが予期せずに終了することがあります。 開いているすべての文書またはブックが閉じられ、データが失われる可能性があります。 Microsoft Office Outlook の電子メール エディターとして Word を使用している場合は、開いているすべての電子メール メッセージも閉じられます。 AppDomain.DomainUnload イベントを処理する際に Windows フォームまたはメッセージ ボックスを表示する場合も、この問題が発生することがあります。

この問題を回避するには、モードレス フォームから、またはモードレス フォームのイベントから Close メソッドを呼び出さないようにします。 代わりに、次の手順を使用します。

  • フォームからドキュメントを閉じる必要がある場合、モーダル フォームを使用します。たとえば、Show の代わりに ShowDialog を使用します。

  • モードレス フォームを使用する必要がある場合は、文書またはブックを閉じる前に、必ずモードレス フォームを閉じて、フォームへの参照を完全に破棄してください。 次に例を示します。 このコードを使用する場合は、Word のドキュメント レベルのプロジェクトの ThisDocument クラスから実行してください。

    Dim form1 As SampleForm
    
    Sub OpenForm()
        form1 = New SampleForm
        form1.Show()  ' Show the form modelessly.
    End Sub
    
    Sub ForceShutdown()
    
        ' Completely close the form if it is still running.
        ' Note that hiding the form might not work by itself.
    
        If (Not form1 Is Nothing) Then
            form1.Close()
            form1.Dispose()
            form1 = Nothing
        End If
    
        Me.Close()
    End Sub
    
    SampleForm form1;
    
    private void OpenForm()
    {
        form1 = new SampleForm();
        form1.Show();  // Show form modelessly.
    }
    
    private void ForceShutdown()
    {
        // Completely close the form if it is still running.
        // Note that hiding the form might not work by itself.
    
        if (form1 != null)
        {
            form1.Close();
            form1.Dispose();
            form1 = null;
        }
        object saveChanges = Word.WdSaveOptions.wdSaveChanges; 
        this.Close(ref saveChanges, ref missing, ref missing);
    }
    

C# で missing パラメーターを渡す方法については、「Office ソリューションの省略可能なパラメーター」を参照してください。

Excel のホスト コントロールをメソッドに渡すと InvalidCastException がスローされる

Excel のメソッドとプロパティには、ネイティブ Office オブジェクトを渡すことが必要なものがあります。 .NET Framework 3.5 を対象とするプロジェクトで Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 属性が false に設定されている場合、ネイティブ Office オブジェクトに基づいたホスト コントロールを渡すと、InvalidCastException がスローされます。 このようなメソッドやプロパティに基になるネイティブ Office オブジェクトを渡すには、ホスト コントロールの InnerObject プロパティを使用できます。 Excel のローカリゼーションに関する問題の詳細については、「さまざまな地域設定を使用した Excel のデータの書式設定」を参照してください。

UI のカスタマイズ

Office ソリューションの特定の種類の UI カスタマイズに関連する次のエラーが発生する場合があります。

Excel のワークシート ウィンドウを分割すると、Windows フォーム コントロールの予期しない動作が発生する

Windows フォーム コントロールが含まれるワークシート ウィンドウを分割すると、コントロールが 2 つのウィンドウで同じように動作しない場合があります。 たとえば、ワークシート上の TextBoxBackColor プロパティを変更するコードを実行した場合、いずれか一方のウィンドウだけで変更が反映されます。

Outlook アドインでカスタム プロパティ ページを追加できない

Outlook アドインで、Outlook の [オプション] ダイアログ ボックスまたは Outlook フォルダーの [プロパティ] ダイアログ ボックスにカスタム プロパティ ページを作成する場合、そのカスタム プロパティ ページを明示的に COM から参照できるようにする必要があります。既定では、アセンブリは COM からは参照できません。 これを行わないと、アドインはカスタム プロパティ ページを作成できず、アドインのデバッグ時に COMException が発生します。

COM からカスタム プロパティ ページを参照できるようにするには、以下の 2 つの方法があります。

  • プロジェクト内のカスタム プロパティ ページを実装するクラスに ComVisibleAttribute を追加します。 クラスに属性を追加する方法については、「属性の適用」を参照してください。

  • Visual Studio を使用してアドイン アセンブリ全体を COM から参照可能にします。

    Visual Studio を使用してアドイン アセンブリを COM から参照可能にするには

    1. Visual Studio のソリューション エクスプローラーでプロジェクトを右クリックし、[プロパティ] をクリックします。

    2. [アプリケーション] タブをクリックします。

    3. [アセンブリ情報] をクリックします。

    4. [アセンブリを COM 参照可能にする] チェック ボックスをオンにします。

    5. [OK] をクリックします。

コントロールへのデータのバインディングおよびデータのキャッシュ

データ バインディングまたはキャッシュ データを使用する Office ソリューションで次のエラーが発生する場合があります。

モーダル ダイアログを表示すると ListObject のデータ バインディングが失敗する

Excel で、ListObject にバインドされているデータセットが更新されているときにモーダル ダイアログ ボックスを表示すると、ListObject のデータ バインディングが失敗します。 ListObject でデータ バインディングが失われると、DataBindingFailure イベントが発生します。 ListObject をデータ ソースにバインドし直すには、DataBindingFailure イベントを処理し、SetDataBinding メソッドを呼び出します。

キャッシュされた Visual Basic データセット名がデータ キャッシュ内で正しく表示されない

Visual Basic で Cached および WithEvents を指定して作成した DataSet オブジェクト ([データ ソース] ウィンドウまたはツールボックスからドラッグされ、CacheInDocument プロパティが True に設定された DataSet オブジェクトを含む) は、前にアンダースコアを付けた名前でキャッシュに格納されます。 たとえば、Customers という名前の DataSet を作成した場合、CachedDataItem の名前はキャッシュ内では _Customers です。 キャッシュされた項目へのアクセスに ServerDocument を使用する場合、Customers ではなく _Customers を指定する必要があります。

ServerDocument クラスの使用

Microsoft.VisualStudio.Tools.Applications.ServerDocument クラスを使用する Office ソリューションで次のエラーが発生する場合があります。

Visual Studio 2010 Tools for Office Runtime のみがインストールされているコンピューターで ServerDocument を使用するレガシ アプリケーションを実行できない

Visual Studio 2010 Tools for Office Runtime のみがインストールされているコンピューターで Visual Studio Tools for Office System (Version 3.0 Runtime) の Microsoft.VisualStudio.Tools.Applications.ServerDocument クラスを使用するレガシ アプリケーションを実行しようとすると、アプリケーションで予期しないエラーが発生する場合があります。 アプリケーションを実行するには、コンピューターに Visual Studio Tools for Office System (Version 3.0 Runtime) をインストールします。 両方のバージョンのランタイムを同じコンピューターにインストールできます。

参照

処理手順

Office ソリューションのデザイン時エラーのトラブルシューティング

Office ソリューションのセキュリティのトラブルシューティング

概念

Office ソリューション配置のトラブルシューティング

その他の技術情報

Office ソリューションのトラブルシューティング

履歴の変更

日付

履歴

理由

2010 年 9 月

インストールと読み込みのエラーの表示に関する情報を追加しました。

情報の拡充

2010 年 5 月

FrameworkVersionMismatchException に関するセクションを追加しました。

情報の拡充