アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のマクロでエクセル内の名前を一括でいつも削除しています。印刷範囲を設定していると、「Print_Area」という名前が設定されており、これも削除されてしまうので、印刷範囲の設定がなくなってしまいます。
印刷範囲を消さないようにするにはどうしたらいいでしょうか?
---
Sub NameDel()
Dim nm As Name
For Each nm In ActiveWorkbook.Names
nm.Delete
Next
End Sub

A 回答 (3件)

例えばこんなマクロでも



Sub NameDel()
Dim nm As Name
 For Each nm In ActiveWorkbook.Names
  If InStr(nm.Name, "Print_Area") = 0 Then
   nm.Delete
  End If
 Next
End Sub

でも過去の質問例を見ていると、エクセルが勝手に「定義」した「名前」が存在する場合があり、その「名前」をDeleteしようとするとエラーになるそうなので
  On Error Resume Next
を入れておく方がよいかもしれません
    • good
    • 1
この回答へのお礼

ありがとうございました。うまくいきました。

お礼日時:2008/04/13 16:15

逆転の発想で、一旦全ての名前定義を削除・抹消し


残すべき印刷範囲の名前定義の1行を加えてはどうですか。
残すべきものがすくない場合はコードがすっきりすると思う。
コードは既回答のもので間に合う。
Sub NameDel()
Dim nm As Name
For Each nm In ActiveWorkbook.Names
nm.Delete
Next
'--
Set rng = Range("A1:G20")
With ActiveWorkbook
.Names.Add Name:="Print_area", RefersTo:="=Sheet1!" & rng.Address
End With
End Sub
なお後半は1行にまとめられる。
    • good
    • 0

たとえば、印刷範囲設定がSheet1なら下記。



Sub NameDel()
Dim nm As Name
For Each nm In ActiveWorkbook.Names
If nm.Name <> "Sheet1!Print_Area" Then
nm.Delete
End If
Next
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。シート名の自動取得方法がわからなくて、行き詰ってしまっています。

お礼日時:2008/04/13 16:16

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