|
▼タケル さん:
ループ構文の改善は、後回しにして
>
> Sheets(2).Range(Cells(j, "A"), Cells(j + 5, "A")).MergeCells = True 'アプリケーション定義またはオブジェクト定義のエラー(上手く行く時もある)
>
>
> Sheets(1).Range(Cells(i + 1, "E"), Cells(i + Y, "E")).Select 'アプリケーション定義またはオブジェクト定義のエラーが発生
> Sheets(1).Range(Cells(i + 1, "H"), Cells(i + Y, "H")).Select
うっかりと、このような記述をしてしまい、悩む人が多いようですね。
Sheets(2).Range(
こは、Sheets(2)の領域の宣言をします。その詳細は (・・) のなかに記述していますと
こういうことを意味しています。
で、その (・・・・) の中ですが、このセルからこのセルまで こういう記述ですよね。
でも、『このセル』って、どこのシートのセルでしょうか?
Cells(i + 1, "H") も Cells(i + Y, "H")) も、どこのシートということが明示的に
示されていませんね。
こういう場合、VBAは、標準モジュールであればアクティブシート、
シートモジュールであれば、そのモジュールが属しているシートと見なします。
そうしますと、標準モジュールの場合、Sheets(2)がアクティブシートなら結果オーライですが
それ以外がアクティブになっていると、
Sheets(2)のセル領域の規定で、その詳細は、Sheets(2)以外のここからここまで。
このような矛盾のある規定になりますのでアプリケーション定義エラーとなります。
(・・・・) の中のセルにも SHeets(2). とシート修飾することが必要です。
|
|