Home » エクセルマクロ・Excel VBAの使い方 » Excel VBAのErrorsはErrorオブジェクトのコレクションではない

Excel VBAのErrorsはErrorオブジェクトのコレクションではない

動作検証バージョン:Windows 11 Home + 64bit Excel(バージョン2307 ビルド16626.20000 クイック実行)

Excel VBAには「Errors」「Error」という2つのオブジェクトが用意されています。

コレクションと、そのコレクションに含まれる要素オブジェクトについてご存じであれば、
「ErrorsはErrorのコレクションだな」
と瞬時に思ってしまうのではないでしょうか。

[スポンサードリンク]

ErrorsにはCountプロパティがない

(残念ながら?)ErrorsはErrorのコレクションとは言えないオブジェクトです。

コレクションに必須のCountプロパティが用意されていないのです。

Excel VBAのコレクションにはCountプロパティが用意されています。

皆さんご存じの、WorkbooksにもSheetsにもRangeにもCountプロパティが用意されています。

しかしErrorsオブジェクトにはCountプロパティは何故か用意されていません。

要素を取得するItemプロパティは用意されていて、

その戻り値はErrorオブジェクトなのですが。

For Each~NextでErrorsは処理できない

Excel VBAのコレクションは基本的にFor Each~Nextループで、その要素オブジェクトに対して処理を繰り返すことができます。

WorkbooksもSheetsもRangeも、For Each~Nextループで要素を順番に取得して処理を繰り返すことができます。

一方Errorsオブジェクトに対してFor Each~Nextで処理を繰り返そうとしても、実行時エラーが発生してしまいます。

以下のようなExcelマクロを実行しても、

Sub Errorsはコレクションではない()
 Dim err As Error
 For Each err In ActiveCell.Errors
  Debug.Print err.Value
 Next
End Sub

下図のような
「実行時エラー '438': オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
実行時エラーとなります。

[デバッグ]ボタンをクリックすると、下図のように

「For Each」の行で実行時エラーになっていることがわかります。

このようなオブジェクトはErrorsだけっぽい

オブジェクトブラウザで「Item」を完全一致検索すれば、Excel VBAでItemプロパティまたはItemメソッドを持つオブジェクトがヒットします。

他にもErrorsオブジェクトのように、複数形的な名前で、Countプロパティを持たないけれどItemは存在するオブジェクトがあるのか調べてみましたが、Excelライブラリの中ではどうやらErrorsオブジェクトだけのようです。

何故このような状態になっているのか、その原因や理由までは、まだ調査できていないのですが。

最終更新日時:2023-07-10 16:04

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Excel VBAのErrorsはErrorオブジェクトのコレクションではない

「エクセルマクロ・Excel VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.