質問: i + 1 End With Next End Sub --- 結果は layout 注意 Journal Pay Rcv Company Input Output Supplier Register レート表 Example for manual 請求書sample 覚書 Journal (2) ひな形 転記用リスト (参照した1つ目) (参照した2つ目) (参照した3つ目) ひな形(2) です。 --- 重複しているシート名は無いと思うのですが、 エラーを無視するという On Error Resume Next というのを、先頭に入れてみました。 「移動またはコピーしようとしている数式またはシートには、移動またはコピー先のワークシートに既にある名前’xxx’が含まれています。この名前を使用しますか?」 のメッセージは出ましたが、実行時エラー1004は出ませんでした。 ですが、コピーして追加するシートが (参照した1つ目) (参照した2つ目) (参照した3つ目) ひな形(2)...ひな形(21)まで出来てしまいました。 どこをどう直して良いのかわかりません。 教えて頂けますか?
回答: まず、**エラーを無視してはいけません**。 > > エラーを無視するという On Error Resume Next > > > 上記は削除してください。 > > Sheets("ひな形").Copy After:=Sheets(Sheets.Count) > > > ~~警告が出ている箇所は、上記になるかと思います。Sheetsの名前を明記せず、Sheets.Countで単に末尾に追加するだけにしていることが原因です。~~ ~~その結果、"ひな形"というシートが二つでき、Excel側が自動で"ひな形 (2)"と重複を避けるべく連番を追加しています。~~ ``` Sheets("ひな形").Copy After:=Sheets(Sheets("転記用リスト").Cells(i, 1).Value) ``` ~~と名前を指定してあげるとエラーを回避できると思われます。~~ 追記かつ訂正 > > Sheets("ひな形").Copy After:=Sheets(Sheets.Count) > > > 私も誤解しておりました! によりますと、引数Afterは、既存シートの「後ろに」シートをコピーする、という意味だそうです。 ですので、既存のシートを指定しなければいけない。よって引数に`Sheets(Sheets.Count)`を指定することは間違いではなかったです。大変失礼しました。 では、何がいけないか。 > > 実行時エラー'1004': > > シートの名前をほかのシート、Visual Basicで参照されるオブジェクトライブラリまたはワークシートと同じ名前に変更することはできません。 > > > 上記のエラーは、同じシート名のシートを二枚作ろうとした場合に発生します。 つまり、このマクロを2回実行すると、`Sheets("転記用リスト").Cells(i, 1).Value`で参照する名前のシートが1回目に作成され、二回目実行時にはすでにその名前のシートがあるため、エラーとなります。 まずは、マクロで作る予定のシート名のシートが全くない状態に手動で戻してやるのが最も簡単かと思います。 つぎに、"転記用マクロ"シートのシート名が列挙しているセルに、同じ名前が2個存在していないかチェックしてください。 ある場合は一意になるよう名前を調整する。無い場合は、2回マクロを実行したことがエラーの原因となります。 マクロの方針ですが、「同じシート名が存在したら、古いシートを削除して、新たにコピーする」くらいの流れにするのが良いかと思います。 「同じ名前のシートの有無をチェックする」方法は、このへんのページが参考になるかと思います。 出張行ってらっしゃい。