1579083503 Excelでシート名が異なっていてもマクロが正しく動くのに、先頭一行を空白行にするとエラーが出る事象につきまして


前回の質問
https://q.hatena.ne.jp/1578650706

で、ご回答いただいたマクロのコード(空腹おやじさんのコード)を深く理解しようと試みました。そうすると、2つの謎に遭遇しました。

まず「Sheet1」「Sheet2」のうち、「Sheet2」のシート名を「検索対象」という名前に変えました。
すると…マクロは問題なく動き、Sheet1のF列に希望のデータを取得・記載してくれました。
なぜシート名を変えたのにマクロが正しく動き処理が行われたのか…これが1つ目の謎です。

もう1つは、タイトルにもしているのですが。
「検索対象」シートの方で、A列にずらりとデータ並んでいますが、一行目だけを空白行にしてみました。
すると…貼付画像のような「実行時エラー'1004':…」が出てきてしまったのです。
なぜ先頭一行を空白行にするとエラーになるのか…自分では理解できません。

2つの謎について、ご説明いただけますと有難いです。
こちらにファイルを置きました。https://xfs.jp/RpZWVJ
よろしくお願い致します<m(__)m>

回答の条件
  • 1人20回まで
  • 登録:
  • 終了:2020/01/28 07:24:45
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Z1000S No.1

回答回数39ベストアンサー獲得回数27

ポイント1100pt

>なぜシート名を変えたのにマクロが正しく動き処理が行われたのか
プロシージャで指定している
Sheet2
は、シート名ではなく、ワークシートオブジェクトのCodeNameだからです。
https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheet.codename

>実行時エラー'1004'
Sheet2の1行目を空白行にしたため、
rDatasHD が1行分しかなくなったため、
次の行

Set rDatasD = rDatasHD.Resize(rDatasHD.Rows.Count - 1).Offset(1)

において、rDatasHD.Rows.Count が、1となるため
Resize(0)となり、Resize出来ないためエラーとなります。

他3件のコメントを見る
id:Z1000S

違います。

シート名とCodeNameは別物です。

オブジェクトのコード名はオブジェクトを表すオブジェクト式の代わりに使用できます。

シート名は、コード名と異なる場合があります。

https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheet.codename

VBEの画面で任意のシートを選択した状態で
プロパティウィンドウで、
(オブジェクト名):CodeName
Name:シート名
です。

2020/01/19 16:15:58
id:moon-fondu

ありがとうございます、VBEの画面でプロパティウィンドウを開いて確認してみます!

2020/01/28 07:24:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません