- 締切済み
VBA(マクロ初心者)シート名の重複エラーの回避
マクロ初心者です。 test.xlsmというファイルにて マクロを編集し、 ActiveSheet.Name = "コーヒー当番表" で、シート名に名前を"コーヒー当番表"とつけています。 しかし、test_2.xlsというファイルでシート名に既に "コーヒー当番表"と名前がつけられていた場合、 test.xlsmとtest_2.xlsを開いた状態で、 test.xlsmのマクロを実行すると シート名の重複のせいか、実行エラーしてしまいます。 回避するためには、どのようなコードを記述したら良いでしょうか。 御助言ください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- utun01
- ベストアンサー率40% (110/270)
マクロの内容が分からないとなんとも言えない感じですが、 test_2.xlsのシートをtest.xlsmにコピーしているのではないでしょうか? もしこういった操作が途中に入っている様でしたら、 test_2.xls内でシートを別名で複製し、 複製した方をtest.xlsmに移動させるようにすれば解決するかもしれません。
- imogasi
- ベストアンサー率27% (4737/17069)
#2でおっしゃてるように、私も質問がおかしいと思います。 Aブック Bブック があって、何かの業務上の関連がある場合、 (1)Bブックでは、Aブックのシート名と同じシート名は使いたくない のか (2)Aブック(やBブック)の中では、同じシート名は避けたい。 同じシート名を指定すると、実行したときにエラーになり、VBAコードでエラーが出て止まるのだが、止めない手当てをして、別のシート名を指定して、実行を続けたい のが (3)その他 なのか、はっきりして、再(別)質問のこと。 読者が普通なら、どう考えるかとか、想像が必要だ。よくあるケースではないなら、よくあるケースではないことを注記して質問するものだ。 ーー エクセルのバージョンも注記のこと。2007以後形式と2003までの形式のファイルと混合している(両者を1つの実行VBAで扱っている)のか?
- o_chi_chi
- ベストアンサー率45% (131/287)
回避策ではないですが、 ブックが違うとシート名重複にはならないと思います。 もっと違うところに原因があるのでは。
- nda23
- ベストアンサー率54% (777/1415)
エラーがでても処理を続けるにはエラーハンドリング という技法を使います。 On Error GoTo ラベル または On Error Resume Next という構文です。 サンプル On Error Resume Next ActiveSheet.Name = "コーヒー当番表" If Err.Number Then MsgBox "既に表が存在します" ThisWorkbook.Worksheets("コーヒー当番表").Select End If On Error GoTo 0 On Error GoTo 0 はエラーハンドリングを 終了させるステートメントです。 Errオブジェクトはエラーの内容を持つもので、 Numberプロパティはエラーコードです。 これが0なら正常、0以外はエラーです。 If Err.Number <> vbNormal Then としても OKです。(vbNormalは0) 古い習慣で0は偽、0以外は真なので、 サンプルのように「 <> 0 」を書かなくても 0以外ならThen節に制御が移ります。