次の方法で共有


Visual Studio Tools for Office Version 2003 のアップグレード

更新 : 2007 年 11 月

Visual Studio Tools for Office Version 2003 を Microsoft Visual Studio 2005 Tools for the Microsoft Office System (Visual Studio Tools for Office) にアップグレードした場合は、ドキュメント レベルのプロジェクトについて手動のアップグレード作業を行う必要があります。

新しいプロジェクト システムでは、プロジェクト コード テンプレートが大幅に変更されました。アップグレードしたプロジェクトには新しいプロジェクト構造体がありますが、コードは、以前のプロジェクト コード テンプレートをベースとした元のコード ファイルに保持されます。アップグレード後すぐにソリューションが実行されるようにするために、インポートされた古いクラス (既定で OfficeCodeBehind という名前の元のクラス) が、新しいプロジェクト クラスによってインスタンス化されます。完全なアップグレードを行うためには、このトピックで説明するように、古い OfficeCodeBehind クラスから、新しいドキュメント、ワークブック、またはシート クラスに、コードを移動する必要があります。

新しいプロジェクト システムおよび構造体

Visual Studio Tools for Office Version 2003 のプロジェクト システムには、コードに対して 1 つのメイン クラス ファイルがありました。新しいプロジェクト システムは、ドキュメントまたはワークブックを表す、ソリューション エクスプローラでのコンテナ構造体が特徴です。コードのクラス ファイルは、コンテナ構造体の下にあります。これらのクラス ファイルの下には、Visual Studio Tools for Office によって生成されたコードを含む非表示のファイルがあります。非表示のファイルのコードは、開発中に再生成されて変更が失われる可能性があるため、変更しないことをお勧めします。

Excel ブックとテンプレートのプロジェクト

Excel ブックとテンプレートのプロジェクトには、各ワークシートに対する別個のクラス ファイル、およびワークブック全体のクラス ファイルが含まれています。ワークシート上のコントロールに応答するコードなどの、ワークシート固有のコードは、シート クラスに配置される必要があります。新しいドキュメントに対しては、既定では、これらのクラスは Sheet1.vb または Sheet1.cs、Sheet2.vb または Sheet2.cs などの名前が付けられます。ワークブックの Open イベント、BeforeClose イベント、および操作ウィンドウ コードなどの、ワークブックに影響するコードは、通常、ワークブック クラスに配置される必要があります。既定では、このクラスには ThisWorkbook.vb または ThisWorkbook.cs という名前が付けられます。

Word 文書とテンプレートのプロジェクト

Word 文書とテンプレートのプロジェクトには、文書に関連するすべてのコードを含めるための 1 つのコード ファイルがあります。既定では、このクラスには ThisDocument.vb または ThisDocument.cs という名前が付けられます。

詳細については、「Office プロジェクト テンプレート」を参照してください。

アップグレードのプロセス

プロジェクトをアップグレードすると、Visual Studio では次の処理が行われます。

  • 新しいファイル形式およびプロジェクト構造体に準拠するように、プロジェクトをアップグレードします。

  • 既存のドキュメントを新しいプロジェクト フォルダにコピーします。

  • カスタム ドキュメント プロパティ _AssemblyName0 および _AssemblyLocation0 を削除し、既存のマネージ コード拡張が実行されないようにします (プロジェクトが作成されるときに、これらのプロパティが再度追加されます)。

  • 元のメイン コード ファイルが追加されますが、何が起こったのかを説明するコメントが組み込まれます。また、ファイルの名前が <DocumentName> から (古い) <DocumentName> に変更されます。

  • 元のプロジェクトから新しいプロジェクトに、すべてのファイルが追加されます。

  • すべての既存の参照が新しいプロジェクトに追加されます。

既存のコードは新しいクラスには移行されません。その代わりに、古いメイン クラスの _Startup メソッドが、新しいメイン クラスの Startup メソッドから呼び出されます。これにより古いクラスがインスタンス化され、古いバージョンと同じ方法でソリューションが実行されます。

(古い) <DocumentName> のクラスの既定の名前は、OfficeCodeBehind です。アップグレードされた Word プロジェクトでは、メイン クラスの既定の名前は ThisDocument です。アップグレードされた Excel プロジェクトでは、メイン クラスの既定の名前は、ワークブックのレベルで実行されるコードが含まれるクラスに対しては ThisWorkbook です。また、ワークシート レベルで実行されるコードに対しては Sheet1、Sheet2 などです。

アップグレードを完了するには、次を行う必要があります。

  • 古いクラス (既定の名前である OfficeCodeBehind が付いています) から新しいドキュメント、ワークブック、およびシート クラスに、コードを手動で移動し、次に、古いコード ファイルを削除します。しかし、既存のコードをそのまま維持する場合、古いコード ファイルを残し、新しいクラスから呼び出してコードを実行することができます。ツールによって追加されたすべての新しいコードは、新しいクラスに配置されます。

  • 以下に説明するように、コードを更新します。

  • すべての ActiveX コントロールをマネージ コントロールに置き換えます。

次を行うこともできます。

  • C# コードのリファクタ

古いメイン クラスから新しいクラスへのコードの移動

Visual Studio のツールを利用できるように、古いクラスから新しいクラスにコードを移動することをお勧めします。ツールでは、コードを生成するときに、新しいクラスが自動的に使用されます。たとえば、ドキュメントにボタンを追加し、ダブルクリックしてコードを取得する場合、新しいクラスに既定のイベント ハンドラが追加されます。

Excel ソリューションをアップグレードする場合、移動した各メソッドをどのクラスに含めるのかを考慮してください。通常、ワークブックまたはすべてのシートにメソッドが属している場合、ThisWorkbook クラスにコードを配置する必要があります。たとえばシート上のコントロールのコードなど、コードが 1 つのシートに属する場合、コードは適切なシート クラスに属します。

作業の開始に役立てるために、新しい ThisDocument または ThisWorkbook クラスで生成されたコードに、コメントされたプレースホルダ メソッドが含まれています。これらのメソッドを、次のいずれかの方法で使用できます。

  • 古いクラスからすべてのコードを取り出し、アップグレードされたソリューションで用意した新しいクラスに配置します。

  • 新しいメソッドでコードを記述し、古いクラスにある古いメソッドを呼び出します。これが機能するためには、プライベートでなくなるように、古いクラス内のメソッドを変更する必要があります。

古いクラスをインスタンス化し、そのクラスにあるメソッドを呼び出すプレースホルダ メソッドの例を、次に示します。

Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles Me.Startup

    OldCode = New OfficeCodeBehind()
    OldCode._Startup(Me.ThisApplication, Me)
End Sub

''Private Sub ThisDocument_Open() Handles MyBase.Open
''    OldCode.ThisDocument_Open()
''End Sub
''
''Private Sub ThisDocument_Close() Handles MyBase.CloseEvent
''    OldCode.ThisDocument_Close()
''End Sub
private void ThisDocument_Startup(object sender, System.EventArgs e)
{
    OldCode = new OfficeCodeBehind();
    OldCode._Startup(this.Application, this);
}

//private void ThisDocument_Open()
//{
//    OldCode.ThisDocument_Open()
//}
//
//private void ThisDocument_Close(ref bool Cancel)
//{
//    OldCode.ThisDocument_Close(ref Cancel)
//}

すべてのコードが新しいクラスに移動された後、古いクラスを削除します。

コードの更新

既存のコードで Application を参照しているか、特定のイベントまたはメソッドを呼び出しているか、Open イベントを使用している場合は、コードを変更しなければならないことがあります。

アプリケーションの修飾

Visual Studio Tools for Office Version 2003 では、Application の修飾されていない使用は、System.Windows.Forms.Application 型を参照していました。Visual Studio Tools for Office では、Word または Excel の Application オブジェクトを参照しています。つまり、同じ結果を得るためには、Application への修飾されていないすべての参照を、完全修飾名前空間 System.Windows.Forms.Application を使用して更新する必要があります。たとえば、Application.Run(New Form1) などのコードを使用してフォームを開く場合、System.Windows.Forms.Application.Run(New Form1) のように書き直す必要があります。

イベント名およびメソッド名の変更

Word および Excel では、オブジェクト モデル内のメソッドと同じ名前をもつイベントをいくつか公開しています。たとえば、Word 文書には Close イベントと Close メソッドがありますが、Visual Studio Tools for Office ソリューション コードではそれぞれのメンバに別々の名前が必要です。そこで、次のメンバへの既存の参照を新しい名前に置き換える必要があります。

Word.Document

  • Close イベントの場合は、CloseEvent を使用します。

  • Sync イベントの場合は、SyncEvent を使用します。

Excel.Worksheet

  • Activate イベントの場合は、ActivateEvent を使用します。

  • Calculate メソッドの場合は、CalculateMethod を使用します。

Excel.Workbook

  • Activate イベントの場合は、ActivateEvent を使用します。

  • Sync イベントの場合は、SyncEvent を使用します。

Excel.Chart

  • Activate イベントの場合は、ActivateEvent を使用します。

  • Select イベントの場合は、SelectEvent を使用します。

Open イベントの処理

アップグレードされたプロジェクトでは、Excel ブックの Open イベントや Word 文書の Open イベントは発生しません。コードで Open イベントを使用している場合は、そのコードを移動する必要があります。移動先は、Excel ブックの場合は、新しい ThisWorkbook クラスの ThisWorkbook_Open() イベント ハンドラ、Word 文書の場合は、新しい ThisDocument クラスの ThisDocument_Open() イベント ハンドラです。または、元の OfficeCodeBehind クラスの _Startup メソッドから Open イベント ハンドラを呼び出すという方法もあります。

ActiveX コントロールのマネージ コントロールへの置き換え

ドキュメントまたはワークブックで ActiveX コントロールを使用している場合、Visual Studio の [ツールボックス] でそれらを削除し、マネージ コントロールに置き換える必要があります。新しい Visual Studio Tools for Office プロジェクトでは、ActiveX コントロールには制限があります。たとえば、ActiveX コントロールにはデータを連結できないため、それらをコード化するために、特殊な相互運用機能アセンブリを使用する必要があります。このため、新しい Visual Studio Tools for Office プロジェクトでは、ActiveX コントロールの使用はサポートされていません。

コードのリファクタ (C# のみ)

Visual Studio には、C# コードの整理および配置に便利なツールが用意されています。このプロセスはリファクタと呼ばれています。コード エディタでコード ファイルを開いているときに、これらのツールが含まれている [リファクタ] メニューが Visual Studio に追加されます。詳細については、「リファクタリング」を参照してください。

参照

処理手順

方法 : Visual Studio Tools for Office ソリューションをアップグレードする

概念

Office ソリューションのアセンブリの概要

Office ソリューションのアップグレードと移行