• 締切済み

VBAでエラーメッセージが出ないようにしたい

book1にbook2のセルをコピーして貼り付け、book2を閉じようとしたところ、シートにリンクが張られているのか以下のようなメッセージボックスが出てきます ----ここから----------------- 移動またはコピーしようとしている数式またはシートには、移動またはコピー先のワークシートに既にある名前’xxx’が含まれています。この名前を使用しますか? コピーまたは移動先のシートに定義されている名前を使用する場合は「はい」をクリックします。 数式またはワークシートで参照する範囲の名前を変更する場合は、「いいえ」をクリックし、「名前の重複」ダイアログボックスに新しい名前を入力します。 ---------ここまで------------------ 取り敢えず「はい」をクリックして閉じているのですが、複数回このメッセージが繰り返し出てきて面倒なので、VBAでこのメッセージを出さないようにしたいのですが、どのようにすればよいのでしょうか?

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 [名前定義]は、本来は、マクロとは相性がよくありません。Application.DisplayAlerts = False でエラーをなくすのは良いのかもしれませんが、[名前の定義]が二重構造になってしまいますので、あまり関心しません。ただ、結果論で、コーディングする人のマクロの技術の問題ですから、当面の問題が起こらなければそれでよいのではないか、と言われるのがオチですから、それ以上は、本質的なコーディングの段階から技術を求められなければ何も言えません。 ただ、本来、シートコピーの段階で、例えば、 以下で新規のブックを用意して、標準モジュールに書いていただければ分かります。 Sub DoubleNamesTest1()   Dim NewBook As Workbook   Dim AcBook As Workbook   Set AcBook = ActiveWorkbook     With AcBook.Worksheets(1)       '名前定義       .Range("A1:C3").Name = "myTest"       .Copy After:=AcBook.Sheets(AcBook.Sheets.Count)       .Copy     End With     Set NewBook = ActiveWorkbook     With NewBook     '以下がエラーが発生する           AcBook.Sheets(AcBook.Sheets.Count).Copy After:=NewBook.Sheets(1) '*          ''ここの二行が、エラー対策      '.Sheets.Add After:=.Sheets(.Sheets.Count) '**      'AcBook.Sheets(AcBook.Sheets.Count).Cells.Copy .ActiveSheet.Range("A1") '**     End With     Set NewBook = Nothing     Set AcBook = Nothing End Sub AcBook.Sheets(AcBook.Sheets.Count).Copy After:=NewBook.Sheets(1)   ↓  上記一行を以下の二行に置き換える  .Sheets.Add After:=.Sheets(.Sheets.Count)  AcBook.Sheets(AcBook.Sheets.Count).Cells.Copy .ActiveSheet.Range("A1")   というように、Cells.Copy すればよいです。 ですが、[名前の定義]をどうするか、と言われれば、それは、その都度、問題を解決しなければなりません。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

一応VBAにはApplication.DisplayAlerts = False がある。 質問の場合もこれを入れることで、出なくなるか、やってみてください。 ツールーマクローVBE-挿入ー標準モジュールで出た画面に Sub auto_open() MsgBox "aaa" Application.DisplayAlerts = False End Sub Sub auto_close() MsgBox "bbb" Application.DisplayAlerts = True End Sub 確認できたらMsgboxの行は毎回出ると、しつこいから削除のこと。 (ほかにもコードのやり方があります) ーーー しかし本件は有名なもののようで、Googleでエラーメッセージの「移動またはコピーしようとしている・・」の前から20文字ぐらい(長い目に。途中で切っても可)をコピーし、検索語として貼り付けして、照会すると、そのものズバリに関した記事がたくさんでる。 http://q.hatena.ne.jp/1211612862 など、明確ではないかな。 この対策を取れないか検討するのが筋です。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

「はい」で、コピー先シートの名前を使用するので構わないのなら、とりあえずPasteメソッドの前に Application.DisplayAlerts = False でメッセージの回避のみ、できます。 それで本当に不都合がないのか、各bookの名前定義を確認しておいたほうが良いとは思いますが。 例えば数式コピーの場合、名前が一緒で、その名前範囲のデータがbook1とbook2で違う時、 貼り付け直後に数式結果が変わってくる事もあるのでは。