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’: オブジェクトが必要です。」のエラーが発生。
そのため、デバッグで状況確認すると「xlUp=Empty値」となっていた。
解決方法
End(xlUp) をEnd(-4162)に修正して、次のようにすれば最終行が取得できた。
例:別途 Set xlApp = CreateObject("Excel.Application") でオブジェクト変数を設定して
最終行 = xlApp.Sheets("リスト").Cells(xlApp.Sheets("リスト").Rows.Count, 1).End(-4162).Row
なお、End(-4162)とする理由は次のとおり。
また、詳細は不明だが原因として、WordでExcelを操作する場合に参照設定であればEnd(xlUp)で動作した。
しかし、CreateObject関数を使用して
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
といったように利用する場合は、End(-4162)での対応が必要だった。
以上、Word VBAでExcelのシートの最終行を取得する方法と、xlUpで実行時エラー 424の解決方法です。
誰かとVBAを共有するとき、参照設定の設定方法が説明不要になるCreateObject関数を私は使用することが多いですが、このような違いもあるので注意が必要という備忘録でした。