Home » エクセルマクロ・Excel VBAの使い方 » コンパイルエラーになるオブジェクトと実行時エラーになるオブジェクト

コンパイルエラーになるオブジェクトと実行時エラーになるオブジェクト

対象:Windows版Excel2016(32bit版)

VBA:コンパイルエラー

Excel VBAの経験がある程度ある方なら、オブジェクトによってコンパイルエラーになるものと、ならないものがあることを経験則でご存知でしょう。

Excel VBAではコンパイルエラーになるオブジェクトと実行時エラーになるオブジェクトがある

例えばWorksheetオブジェクトの場合、以下のように存在しないプロパティ・メソッドを呼ぶコードが書かれていれば、コンパイルエラーになります。
 Sub Worksheetはコンパイルエラーになる()
  Dim sh As Worksheet
  For Each sh In Worksheets
   sh.hogehoge
  Next sh
 End Sub

これに対してRangeオブジェクトの場合は、コンパイルエラーは発生することなく実行ができてしまい、存在しないメソッドの行で実行時エラーが発生します。
 Sub Rangeはコンパイルエラーにならない()
  Dim rng As Range
  For Each rng In Range("A1:G7")
   rng.hogehoge
  Next rng
 End Sub

[スポンサードリンク]

Worksheetオブジェクトのように、コンパイルエラーになってくれるほうがありがたいのですけれど、RangeオブジェクトはExcelの中でもっとも複雑なオブジェクトですから、コンパイル時に厳しくチェックするのは難しいのだろうなあ、くらいに思ってきました。

コンパイルエラーになるオブジェクトを確認するサンプルマクロ

他のオブジェクトの場合どうなのだろうと気になり、いくつかのオブジェクトをテストしてみました。テスト結果は、変数宣言行の後ろに「実行時エラー」または「コンパイルエラー」とコメントを入れています。

ブックモジュール・シートモジュールの名前は、デフォルトの「ThisWorkbook」「Sheet1」から変更されていないことを想定しています。


Sub コンパイルエラーになるオブジェクトを確認する()
 Dim obj As Excel.Application ' 実行時エラー
' Dim obj As Office.CommandBars ' コンパイルエラー
' Dim obj As Office.CommandBar ' コンパイルエラー
' Dim obj As Excel.AddIns ' 実行時エラー
' Dim obj As Excel.AddIn ' 実行時エラー

' Dim obj As Excel.Workbooks ' コンパイルエラー
' Dim obj As Excel.Workbook ' 実行時エラー
' Dim obj As VBAProject.ThisWorkbook ' コンパイルエラー

' Dim obj As Excel.Windows ' 実行時エラー
' Dim obj As Excel.Window ' 実行時エラー

' Dim obj As Excel.Sheets ' コンパイルエラー
' Dim obj As Excel.Worksheets ' 実行時エラー
' Dim obj As Excel.Worksheet ' コンパイルエラー
' Dim obj As Excel.Charts ' 実行時エラー
' Dim obj As Excel.Chart ' コンパイルエラー
' Dim obj As VBAProject.Sheet1 ' コンパイルエラー

' Dim obj As Excel.Range ' 実行時エラー
' Dim obj As Excel.WorksheetFunction ' 実行時エラー

' Dim obj As Excel.Shapes ' 実行時エラー
' Dim obj As Excel.Shape ' 実行時エラー
' Dim obj As Excel.ShapeRange ' 実行時エラー
' Dim obj As Excel.DrawingObjects ' 実行時エラー
' Dim obj As Excel.Rectangle ' 実行時エラー
' Dim obj As Excel.Oval ' 実行時エラー

 obj.hogehoge
End Sub

グローバルメンバーのプロパティから取得できるオブジェクトをメインに、私が気になったものをテストしてみたのですけれど、予想以上にコンパイルエラーにならないオブジェクトがあります。

Excel VBAを嫌う、プロのプログラマーさんの気持ちが、少しわかる気もします。

ちなみにPowerPoint VBAでも同様のテストをしてみたところ、PowerPoint VBAでは期待通り、私がテストしたすべてのオブジェクトでコンパイルエラーになりました。それが正常な挙動だろうと感じます。

最終更新日時:2019-06-25 10:20

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » コンパイルエラーになるオブジェクトと実行時エラーになるオブジェクト

TrackBack:0

TrackBack URL

Home » エクセルマクロ・Excel VBAの使い方 » コンパイルエラーになるオブジェクトと実行時エラーになるオブジェクト

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

検索


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

.