2016年1月2日土曜日

Excel VBAで行の挿入に失敗する

年が明けました。
とはいっても、残念ながら、昨年し残した仕事がなくなった訳ではありません。
という訳で、正月早々から、プログラミングをしています。

今回はExcel VBA。Excelの資料を自動作成する、というのに取り組んでいます。
これまで、Excel VBAは結構使ってきましたが、どちらかというとデータ処理結果を残すのにExcelという表形式が適していただけで、主にVisual Basic同様の感覚で使っていました。相違点といえば、WorksheetとCellsを指定するくらい。
ただ、今回は、Excelファイルを雛形からコピーして、セル書式を定義し、データ量に応じて表の行数を制御する、といった、Excel寄りの内容で、正直、あまり経験はありません。

ということで、いつもの如く、先達たちの知見をGoogle先生から学びます。

ファイルコピーとかは難なく正常に動作。が、行の追加で

Application.ActiveWorkbook.Sheets("Sheet1")..Rows.Insert

とすると、1004エラーが発生してしまいました。


エラーメッセージを読んでも訳が分からないため、以下のそれぞれの記事を参照。
エクセルのVBAでの行の挿入について
エクセル VBA で「実行時エラー '1004': Range クラスの Select メソッドが失敗しました。」
Office TANAKA - Excel VBAの実行時エラー
Error message: To prevent possible loss of data, Microsoft Excel cannot shift nonblank cells off the worksheetRuntime error 1004 when inserting rows via VBA


上記を読んでいて分かったのは、1004エラーにはいろいろな種類があるということ、行の追加を行う際にはいろいろと内部的な処理があるということでしょうか。

・行挿入前にファイルを保存する
・xlDownを指定する

等、試みたのですが、いずれも成功せず。

正月早々、これは縁起が悪い、と、ちょっと諦め気味だったのですが、初歩の初歩に戻って1つの実験をしました。それは

『マクロを記録してみて、どんなコードが生成されるか確認する』

です。 これを試してみたところ、こんな感じでコードが生成されることを確認。

    Rows("8:8").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

で、結局、これに倣って修正するとうまく動きました。
一応、今年の初仕事(初内職)は無事完了。

1 件のコメント:

  1. 同じエラーで悩まされてました・・・・
    解決しました!!!
    ありがとうござます

    返信削除