shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Word VBA】Excelシートの最終行取得(xlUpで実行時エラー 424の対応)

WordのVBAで、Excelのシートにある情報を使った繰り返し処理等をするために、最終行取得をしようとすると「実行時エラー424」となったので解決方法の備忘録。

なお、使用のバージョンは「Microsoft® Word for Microsoft 365 MSO」。

 

エラーの背景と状況

ExcelのVBAであれば、最終行の取得は

例:Sheets(“リスト")で、2列目の場合

最終行 = Sheets(“リスト").Cells(Rows.Count, 2).End(xlUp).Row

といったように、End(xlUp) を活用して取得する方法があります。

同様に、WordのVBAで実施してみたところ「実行時エラー ‘424’: オブジェクトが必要です。」のエラーが発生。

「実行時エラー ‘424’: オブジェクトが必要です。」のエラー画面

「実行時エラー ‘424’: オブジェクトが必要です。」のエラー

そのため、デバッグで状況確認すると「xlUp=Empty値」となっていた。

 

解決方法

End(xlUp) をEnd(-4162)に修正して、次のようにすれば最終行が取得できた。

 例:別途 Set xlApp = CreateObject("Excel.Application") でオブジェクト変数を設定して

最終行 = xlApp.Sheets("リスト").Cells(xlApp.Sheets("リスト").Rows.Count, 1).End(-4162).Row

 

なお、End(-4162)とする理由は次のとおり。

learn.microsoft.com

 

また、詳細は不明だが原因として、WordでExcelを操作する場合に参照設定であればEnd(xlUp)で動作した

参照設定の設定

参照設定


しかし、CreateObject関数を使用して

Dim xlApp As Object

Set xlApp = CreateObject("Excel.Application")

といったように利用する場合は、End(-4162)での対応が必要だった。


以上、Word VBAでExcelのシートの最終行を取得する方法と、xlUpで実行時エラー 424の解決方法です。


誰かとVBAを共有するとき、参照設定の設定方法が説明不要になるCreateObject関数を私は使用することが多いですが、このような違いもあるので注意が必要という備忘録でした。