拙著『Excel VBAユーザーのためのWord VBA入門(1)』では、複数のコレクションについて、単独のオブジェクトを取得するItemメソッドをご紹介しています。
これらItemメソッドの引数に指定できるデータ型が、明確にLongと定義されているものと、型が明示されていないVariantのものがあることを、意識しておきましょう。
Paragraphs.ItemとDocuments.Itemの違い
例えば、
「6-2. ParagraphsからParagraphを取得する」で解説しているParagraphs.Itemメソッドは、
Function Item(Index As Long) As Paragraph
と定義されていることが、オブジェクトブラウザーの詳細ペインからわかります。
一方、
「2-6. Documents.ItemでDocumentを取得する」で解説しているDocuments.Itemメソッドは、
Function Item(Index) As Document
となっています。
引数Indexに指定できるデータが、Paragraphs.Itemの場合は「Index As Long」となっているのに対し、Documents.Itemの場合は「As 〇〇」といった表記がありません。
Paragraphs.Itemには整数しか指定できないのに対し、Documents.Itemの場合「1」などの整数も「sample.docx」のような文字列も指定できるためです。
実行時エラーメッセージの違い
このことは、実行時エラーのメッセージからも垣間見えます。
例えば、以下のようにParagrapsh.Itemメソッドの引数に空白文字列を指定したコードを実行した場合には、
Set par = ActiveDocument.Paragraphs.Item("")
「実行時エラー '13': 型が一致しません。」となります。
Paragraphs.Itemは引数にLong型しか指定できないにも関わらず、文字列を指定しているので「型が一致しません。」です。
それに対し、Documents.Itemメソッドの引数に空白文字列を指定した場合、
Set doc = Documents.Item("")
「実行時エラー '4160': ファイル名が無効です。」となります。
Documents.ItemはString型も引数として受け取れるため「型が一致しません。」ではないわけです。
最終更新日時:2021-04-03 15:23
Home » 電子書籍 » Excel VBAユーザーのためのWord VBA入門 » コレクションのItemメソッドに指定する引数の型を意識しましょう