前回の質問
https://q.hatena.ne.jp/1578650706
で、ご回答いただいたマクロのコード(空腹おやじさんのコード)を深く理解しようと試みました。そうすると、2つの謎に遭遇しました。
まず「Sheet1」「Sheet2」のうち、「Sheet2」のシート名を「検索対象」という名前に変えました。
すると…マクロは問題なく動き、Sheet1のF列に希望のデータを取得・記載してくれました。
なぜシート名を変えたのにマクロが正しく動き処理が行われたのか…これが1つ目の謎です。
もう1つは、タイトルにもしているのですが。
「検索対象」シートの方で、A列にずらりとデータ並んでいますが、一行目だけを空白行にしてみました。
すると…貼付画像のような「実行時エラー'1004':…」が出てきてしまったのです。
なぜ先頭一行を空白行にするとエラーになるのか…自分では理解できません。
2つの謎について、ご説明いただけますと有難いです。
こちらにファイルを置きました。https://xfs.jp/RpZWVJ
よろしくお願い致します<m(__)m>
>なぜシート名を変えたのにマクロが正しく動き処理が行われたのか
プロシージャで指定している
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出来ないためエラーとなります。
違います。
シート名とCodeNameは別物です。
VBEの画面で任意のシートを選択した状態で
2020/01/19 16:15:58プロパティウィンドウで、
(オブジェクト名):CodeName
Name:シート名
です。
ありがとうございます、VBEの画面でプロパティウィンドウを開いて確認してみます!
2020/01/28 07:24:27