VBA

【VBA】エクセルVBAエラー range内のcellsプロパティで1004エラーになる理由と解決法

更新日:

広告

VBA range内のcellsプロパティでエラーになる


rangeプロパティ内のcellsプロパティは組み合わせを用いて変数で範囲指定できるので便利ですが、マクロ実行時のシートによってエラーになったりならなかったりしました。

エラー内容

Microsoft Visual Basic
実行時エラー '1004':
アプリケーション定義またはオブジェクト定義のエラーです

解決法

修正前

Worksheets(1).range(cells(1,1),cells(1,maxline)).ClearContents

修正後

Worksheets(1).Range(Worksheets(1).Cells(1, 1), Worksheets(1).Cells(5, 1)).ClearContents

理由

解決法を見ればわかりますが、rangeプロパティをシート指定するところまではよかったのですがcellsプロパティもシート指定がいるんですね。
指定していないと、rangeプロパティは指定したシートなのに、cellsプロパティ内はアクティブシートのセルを選択することになってしまいます。

実用的には

With Worksheets(1)
.Range(.Cells(1, 1), .Cells(5, 1)).ClearContents
End With

のほうがスマートでしょうか。cellsの前の.がポイントですね。

実行できたりできなかったりはアクティブシートがWorksheets(1)であればcells内もWorksheets(1)を参照するので実行できますが、アクティブシートがWorksheets(2)であった場合はrangeプロパティのシートとその中のセルが別シートで正しくないためエラーとなります。
長いVBAソースだと間にセレクトしたシートに依存するため、エラーが発生するパターンもありますね。

広告

おすすめ記事

1

楽天モバイルにMNPしたのでレビューします。 楽天モバイルって? 楽天モバイルはドコモ、au、ソフトバンクと同じく独自回線を用いた携帯キャリアです。いわゆる格安SIM(MVNO)は携帯キャリアから通信 ...

2

みなさまは増え続けるID,パスワードをどのように管理しているでしょうか。 わたしは、パスワード管理ソフト「ロボフォーム」を利用しています。 パスワード管理ソフトとは インターネットの普及により、銀行や ...

-VBA
-, ,

Copyright© アルパカさんのもふもふした生活 , 2021 All Rights Reserved Powered by STINGER.