Rangeコレクションオブジェクトから単独のRangeオブジェクトをデフォルトプロパティで取得しようとしたときに、上位のワークシートを表すオブジェクトを取得するコードの書き方によって、
「実行時エラー'450' 引数の数が一致していません。または不正なプロパティを指定しています。」
と実行時エラーが発生することを知りました。
本当は引数を取らないタイプのRangeオブジェクトを返すプロパティで、必ずこの状態になるのか気になりテストしてみました。
デフォルトプロパティを使って単独のRangeを取得できる
私がテストしたところ以下のとおり、Worksheet.Cellsプロパティ、Range.MergeAreaプロパティ、ListObject.Rangeプロパティの場合は、Rangeオブジェクトのデフォルトプロパティを使って単独のRangeオブジェクトを取得できました。
Dim rng As Range Set rng = ActiveSheet.Cells(1)
Set rng = ActiveSheet.Range("A1").MergeArea(1)
Set rng = ActiveSheet.ListObjects(1).Range(1) ' 要ListObject
End Sub
デフォルトプロパティを使って単独のRangeを取得できない
これに対して以下のSubプロシージャで使われているプロパティでは、
「実行時エラー'450' 引数の数が一致していません。または不正なプロパティを指定しています。」
が発生します。
Dim rng As Range
'Set rng = ActiveSheet.CircularReference(1)
'Set rng = ActiveSheet.UsedRange(1)
'Set rng = ActiveSheet.Range("A1").CurrentRegion(1)
'Set rng = ActiveSheet.Range("A1").Dependents(1)
'Set rng = ActiveSheet.Range("A1").DirectDependents(1)
'Set rng = ActiveSheet.Range("A1").DirectPrecedents(1)
'Set rng = ActiveSheet.Range("A1").Next(1)
'Set rng = ActiveSheet.Range("A1").Precedents(1)
'Set rng = ActiveSheet.Range("A1").Previous(1)
End Sub
引数を取らないタイプのRangeオブジェクトを返す多くのプロパティで、デフォルトプロパティに頼ってはいけないことがわかります。
その他のプロパティの場合
セル範囲を表すRangeオブジェクトを返すRangeSelectionとSelectionは、Worksheetオブジェクトには存在せず、Windowオブジェクトに存在するので以下の形でテストしましたが、問題なく実行できます。
Set rng = ActiveWindow.RangeSelection(1)
Set rng = ActiveWindow.Selection(1)
行・列を表すRangeオブジェクトを返す各種プロパティを使った、以下のような場合も問題なく実行できます。
Set rng = ActiveSheet.Columns(1)
Set rng = ActiveSheet.Rows(1)
Set rng = ActiveSheet.Range("A1").EntireColumn(1)
Set rng = ActiveSheet.Range("A1").EntireRow(1)
- Newer:SelectedSheetsで取得した選択シートを配列に
- Older:カウンター変数は「i」じゃなくてもいい
Home » Excel VBA Rangeオブジェクト » デフォルトプロパティで単独Range取得時に実行時エラーが発生するか確認した結果