教えて!gooにおける不適切な投稿への対応について

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

gooドクター

A 回答 (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 すればよいです。
ですが、[名前の定義]をどうするか、と言われれば、それは、その都度、問題を解決しなければなりません。
    • good
    • 0

一応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
など、明確ではないかな。
この対策を取れないか検討するのが筋です。
    • good
    • 1

「はい」で、コピー先シートの名前を使用するので構わないのなら、とりあえずPasteメソッドの前に


Application.DisplayAlerts = False
でメッセージの回避のみ、できます。

それで本当に不都合がないのか、各bookの名前定義を確認しておいたほうが良いとは思いますが。
例えば数式コピーの場合、名前が一緒で、その名前範囲のデータがbook1とbook2で違う時、
貼り付け直後に数式結果が変わってくる事もあるのでは。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング