Visual Studio のデザイン時のトラブルシューティング

更新 : 2007 年 11 月

Visual Studio Tools for Office でソリューションを開発する際に発生する可能性のある問題を以下に示します。

ソリューションを保存した後に実行するとエラーが発生する

Visual Studio では、ソリューションは保存されるまで一時フォルダに格納されます。Visual Studio Tools for Office では、この一時フォルダ内のソリューションを信頼するように、自動的にセキュリティ ポリシーが変更されます。この変更は、ソリューションをビルドすると行われます。ソリューションに何も変更を加えずに永続的なフォルダに保存すると、新しい場所からもう一度ソリューションを実行するとき、Visual Studio によるソリューションのビルドは行われません。したがって、新しい場所ではソリューションは自動的に信頼されず、実行されません。

新しいソリューションを永続的な場所に保存した後でエラーが発生する場合は、[ビルド] メニューの [ソリューションのリビルド] をクリックします。こうすることで、ソリューションを変更していなくても、Visual Studio によってソリューションがビルドされます。Visual Studio Tools for Office は、新しい場所のセキュリティ ポリシーに必要な変更を加えます。

制限付きアクセス許可が設定されたドキュメントに基づくドキュメント レベルのプロジェクトをビルドできない

Visual Studio Tools for Office では、ドキュメントに制限されたアクセス許可が設定されている場合、ドキュメント レベルのプロジェクトをビルドすることはできません。プロジェクトに制限付きアクセス許可が設定されたドキュメントが含まれている場合、プロジェクトはコンパイルされず、[エラー一覧] ウィンドウに次のメッセージが表示されます。

カスタマイズを追加できませんでした。

制限付きアクセス許可が設定されたドキュメントを含める場合は、ソリューションの開発およびビルドの段階ではアクセス許可に制限のないドキュメントを使用してください。ソリューションを発行してから、発行場所のドキュメントに制限付きアクセス許可を適用します。

C# を使用すると発生しないイベントがある

同じ名前のメソッドとイベントを持つ Office オブジェクトは、Office プライマリ相互運用機能アセンブリでは 2 つのオブジェクトに分割されています。1 つはすべてのプロパティとメソッドを持つコア オブジェクトです。もう 1 つはイベント オブジェクトで、プロパティまたはメソッドと同じ名前のイベントが含まれます。このようなイベント オブジェクトでは、<objectname>_Event という名前付け規則が使用されます。予測しているイベントが発生しない場合は、<objectname>_Event インターフェイスにキャストします。

たとえば、Workbook には、ActivateEvent イベントと Activate メソッドがあります。このイベントを処理するには、Workbook の代わりに WorkbookEvents_Event を使用します。

宣言セクションでメンバ変数を作成します。

private Excel.Workbook wkbk;
private Excel.WorkbookEvents_Event wbEvents;
private Excel.WorkbookEvents_ActivateEventHandler activateEvent;

_Startup でイベントを接続します。

wbEvents = (Excel.WorkbookEvents_Event)wkbk;
activateEvent = new Excel.WorkbookEvents_ActivateEventHandler(ThisWorkbook_Activate);
wbEvents.Activate += activateEvent;

イベント ハンドラを記述します。

private void ThisWorkbook_Activate()
{
    // Your code goes here.
} 

Excel.Workbook.Activate は、ActivateEvent イベントではなく Activate メソッドを返すので、WorkbookEvents_Event にキャストする必要があります。

また別の方法として、Startup でオブジェクトを対応するイベント インターフェイスにキャストすることもできます。

((Excel.WorkbookEvents_Event)(Globals.ThisWorkbook.InnerObject)).Activate += 
    new Excel.WorkbookEvents_ActivateEventHandler(ThisWorkbook_Activate); 

次にイベント ハンドラにコードを記述します。

private void ThisWorkbook_Activate()
{
    // Your code goes here.
} 

Office クラスへの参照が認識されない

Application など一部のクラス名は、Microsoft.Office.Interop.WordSystem.Windows.Forms のような複数の名前空間にあります。したがって、プロジェクト テンプレートの先頭にある Imports/using ステートメントでは、以下のように、修飾子を短縮する定数を指定しています。

Imports Word = Microsoft.Office.Interop.Word
using Word = Microsoft.Office.Interop.Word;

Imports/using ステートメントをこのように使用した場合は、Office クラスへの参照を Word または Excel の修飾子で区別する必要があります。使用例は次のとおりです。

Dim doc As Word.Document
Word.Document doc;

限定されていない宣言を使用すると、エラーが発生します。使用例は次のとおりです。

Dim doc As Document  ' Class is ambiguous
Document doc;  // Class is ambiguous

Word または Excel の名前空間をインポートし、その名前空間内のすべてのクラスにアクセスできる場合でも、すべての型を Word または Excel の完全修飾名で指定して、名前空間のあいまいさを排除する必要があります。

既存のプロジェクトのドキュメントに基づいて新しいプロジェクトを作成するとコントロールのプロパティが失われる

既存のプロジェクトのドキュメントに基づいて新しい Visual Studio Tools for Office プロジェクトを作成した場合、元のドキュメントにあったコントロールのプロパティは、新しいプロジェクトにコピーされません。既に存在しているコントロールのプロパティは、手動で再設定する必要があります。コントロールのプロパティを保持するには、新しいプロジェクトを作成する代わりに既存のプロジェクトのコピーを作成します。または、(デザイナで) 新しいソリューションに既存のプロジェクトを読み込み、既存のドキュメントのコントロールをコピーして新しいドキュメントに貼り付けます。

文書またはワークシートでコントロールが黒い四角形として表示される

文書またはワークシートでコントロールをグループ化すると、Visual Studio Tools for Office ではコントロールを認識できなくなります。グループ化されたコントロールは [プロパティ] ウィンドウからアクセスできず、文書またはワークシートで黒い四角形として表示されます。コントロールの機能を元に戻すには、グループ化を解除する必要があります。

Word テンプレートのコントロールが Visual Studio に表示されない

Visual Studio デザイナで Word テンプレートを開くと、テキスト行内にないコントロールは表示されない場合があります。これは、Visual Studio では Word テンプレートが [標準] ビューで表示されるためです。コントロールを表示するには、[表示] メニューの [Microsoft Office Word 表示] をポイントして [印刷レイアウト] をクリックします。

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

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

Microsoft Office 2003 プロジェクトに Excel または Word という名前を付けるとコンパイル エラーが発生する

「Excel」および「Word」は、Office プロジェクトの予約済みのキーワードです。

NamedRange コントロールを削除した後でコンパイラ エラーが発生する

デザイナでアクティブでないワークシートから NamedRange コントロールを削除すると、自動生成コードがプロジェクトから削除されずに、コンパイラ エラーが発生する場合があります。コードを確実に削除するには、コントロールを削除する前に NamedRange コントロールを含むワークシートを選択して、アクティブなワークシートにする必要があります。コントロールを削除しても自動生成コードが削除されない場合は、ワークシートをアクティブにして変更を加えると、そのワークシートは変更済みとして識別され、デザイナでコードを削除できます。プロジェクトをリビルドすると、コードが削除されます。

アセンブリへの HTTP パスの使用が機能しない

主に次の 2 つの原因が考えられます。

  • Visual Studio Tools for Office プロジェクト ウィザードは、HTTP 位置で作成されたアセンブリのセキュリティ ポリシーを変更しません。アセンブリに、手動で完全な信頼を与える必要があります。詳細については、「方法 : フォルダおよびアセンブリにアクセス許可を付与する (2003 システム)」を参照してください。

  • ASP.NET では、DLL のダウンロードは既定で無効化されています。アセンブリをユーザーにダウンロードするには、Web サーバー管理者は Internet Information Services (IIS) のプロパティを変更して、アセンブリが保存されているディレクトリから DLL をダウンロードできるようにする必要があります。詳細については、Web サーバーの https://localhost/iisHelp/ を開き、Internet Information Services (IIS) のヘルプを参照してください。

    これがトラブルかどうかをテストするには、Web サーバーのログに DLL 要求の拒否が記録されているかどうかを調べます。別の原因が考えられる場合は、すべての例外でデバッガが割り込むように設定し、エラー メッセージを調べます。

UNC ネットワーク上の場所で作成されたプロジェクトがセキュリティ ポリシーを自動的に変更しない

Visual Studio Tools for Office プロジェクト ウィザードは、セキュリティ ポリシーをユーザー レベルで変更します。UNC ネットワーク上の場所でプロジェクトを作成した場合、アセンブリを実行するには、コンピュータ レベルでセキュリティ ポリシーを変更し、アセンブリに完全な信頼を与える必要があります。コンピュータ レベルのポリシーは手動で変更する必要があります。詳細については、「方法 : フォルダおよびアセンブリにアクセス許可を付与する (2003 システム)」を参照してください。

文書が開かれたときに DocumentChange イベントが起動しない

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

デバッグ後にスレッドが正しく停止しない

Visual Studio Tools for Office では、デバッガでプログラムを正しく終了させるためのスレッド名前付け規則を使用しています。ソリューション内にスレッドを作成する場合、デバッグを中止するときにそのスレッドが正しく処理されるようにするには、各スレッド名に VSTA_ というプレフィックスを付ける必要があります。たとえば、ネットワーク イベントを待機するスレッドの Name プロパティに、 VSTA_NetworkListener という名前を設定します。

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

クリップ アートを挿入するコマンドを実行しても Visual Studio デザイナで何も起こらない

[挿入] メニューの [図] をポイントし、[クリップ アート] をクリックしても、Visual Studio デザイナで Excel または Word を開いている場合は クリップ アート タスク ペインは表示されません。メニュー コマンドを使用してクリップ アートを追加するには、(\bin フォルダにあるブックまたは文書ではなく) メイン プロジェクト フォルダにあるブックまたは文書を Visual Studio の外部で開き、クリップ アートを追加してからそのブックまたは文書を保存する必要があります。

Office 2003 がインストールされているにもかかわらず 2003 用のドキュメント レベルのプロジェクトを作成できない

この問題は、2007 Microsoft Office system をアンインストールして Office 2003 をインストールした場合に発生することがあります。2003 用のドキュメント レベルのカスタマイズ プロジェクトを作成すると、次のエラー メッセージが表示されることがあります。

"Microsoft Office の互換性のあるバージョンがこのコンピュータにインストールされていません。"

この問題を解決するには

  1. Visual Studio を終了します。

  2. 使用する Microsoft Office アプリケーションを開き、すぐに閉じます。たとえば、Excel 2003 ブック プロジェクトを作成する場合は、Excel 2003 を開き、すぐに閉じます。

  3. Visual Studio を起動し、プロジェクトを作成します。

Visual Studio で Excel のドキュメント レベルのカスタマイズ プロジェクトを開くと、Excel ブックが使用できなくなる

Excel 2007 を開き、Visual Studio で Excel 2007 のドキュメント レベルのカスタマイズ プロジェクトを作成すると、最初に開いたブックが応答しなくなります。

この問題を解決するには、Visual Studio デザイナで表示されているワークシートをクリックします。最初に開いたブックが応答を開始します。

参照

処理手順

方法 : オフライン使用のドキュメントを配置する (2003 システム)

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

概念

安全な配置 (2003 システム)

Office プログラミングの共通タスク

その他の技術情報

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