コメントに返信


マイクロソフト・Word(ワード)のAPI矛盾

By Mel - Posted on 10 10月 2009

VSTO (Visual Studio Tools for Office)で開発しているシステムのために、新しい関数をつくる必要がありました。その関数は、ドキュメントの表中で選択されているセルを処理します。しかし、関数をテストしているうちに、SelectionのRangeオブジェクト動作にはセル選択に対して矛盾があることが分かりました。

Rangeオブジェクトは普段Selectionオブジェクト自体と同様に動きます。例えば、以下の2つのコードは、両方とも選択セルの背景色を赤に変更します。

Selectionオブジェクト使用の場合:

  1. Selection.Shading.ForegroundPatternColor = vbRed

Rangeオブジェクト使用の場合:

  1. Dim myrange As Range
  2. Set myrange = Selection.Range
  3. myrange.Shading.BackgroundPatternColor = vbRed

だから、次の表を作ってbとeを含むセルを選択すれば、両方のコードのどちらでも以下の結果が得られます。

しかし、セルのコレクションに関して、RangeオブジェクトはSelectionオブジェクトと異なって、実際に選択されていないセルもコレクションに含まれてしまいます。例えば、以下の2つのコードは、結果が異なっています。

Selectionオブジェクト使用の場合:

  1. For i = 1 To Selection.Cells.Count
  2. Selection.Cells(i).Shading.BackgroundPatternColor = wdColorViolet
  3. Next

Rangeオブジェクト使用の場合:

  1. Dim myrange As Range
  2. Set myrange = Selection.Range
  3. For i = 1 To myrange.Cells.Count
  4. myrange.Cells(i).Shading.BackgroundPatternColor = wdColorViolet
  5. Next

ワードのAPIに詳しい方々が知っているように、Rangeオブジェクトを使用することは多くの場合便利ですが、今回のケースではSelectionオブジェクトを使ったほうがいいですね。

SelectionとRangeオブジェクトの違いについて詳しく知りたい方は、以下のリンクをご参照ください。

http://msdn.microsoft.com/en-us/library/aa164764(office.10).aspx

タグ

返信

このフィールドの内容は非公開にされ、公表されることはありません。
Image CAPTCHA
Enter the characters shown in the image.