VBA range内のcellsプロパティでエラーになる
rangeプロパティ内のcellsプロパティは組み合わせを用いて変数で範囲指定できるので便利ですが、マクロ実行時のシートによってエラーになったりならなかったりしました。
エラー内容
実行時エラー '1004':
アプリケーション定義またはオブジェクト定義のエラーです
解決法
修正前
修正後
理由
解決法を見ればわかりますが、rangeプロパティをシート指定するところまではよかったのですがcellsプロパティもシート指定がいるんですね。
指定していないと、rangeプロパティは指定したシートなのに、cellsプロパティ内はアクティブシートのセルを選択することになってしまいます。
実用的には
.Range(.Cells(1, 1), .Cells(5, 1)).ClearContents
End With
のほうがスマートでしょうか。cellsの前の.がポイントですね。
実行できたりできなかったりはアクティブシートがWorksheets(1)であればcells内もWorksheets(1)を参照するので実行できますが、アクティブシートがWorksheets(2)であった場合はrangeプロパティのシートとその中のセルが別シートで正しくないためエラーとなります。
長いVBAソースだと間にセレクトしたシートに依存するため、エラーが発生するパターンもありますね。