セルには名前をつけることができますが、マクロを実行していると名前が悪さをすることがあります。
なので消し去ってしまいましょう。
経験上、名前を消して困ったことはないので大丈夫です。きっと。
Sub DeleteCellName(wb As Workbook)
Dim currentName As Name
Dim errorNames As Collection
Set errorNames = New Collection
Dim message As String
' ブックに定義されているすべての名前に対して処理を行う
For Each currentName In wb.Names
' 印刷関係は無視する
If InStr(currentName.Name, "Print_Area") = 0 And InStr(currentName.Name, "Print_Titles") = 0 Then
On Error Resume Next
' 名前を削除
currentName.Delete
' 削除したときにエラーが出たときはコレクションに追加してエラーをリセットする
If Err.Number <> 0 Then
errorNames.Add currentName.Name
Err.Clear
End If
On Error GoTo 0
End If
Next
' エラーが出てスルーした名前を表示する
If errorNames.Count > 0 Then
For Each Name In errorNames
message = message & Name & " "
Next
message = "以下の名前は手動で削除してください:" & vbCrLf & message
MsgBox message, vbOKOnly, "エラー"
End If
End Sub
Sub test()
Call DeleteCellName(ThisWorkbook)
End SubAs Nameという見慣れない謎の型がありますね。
見たままですがエクセルの名前型です。
私はこのコードでしか使ったことがないので忘れてもいいと思います。
errorNamesはエラーを格納するコレクションで、今回のコードではサブです。
メインはcurrentName.Deleteだけです。簡単ですね。
よくあるエラーハンドリング
On Error Resume Next
' 名前を削除
currentName.Delete
' エラーがあればコレクションに追加してエラーをリセットする
If Err.Number <> 0 Then
errorNames.Add currentName.Name
Err.Clear
End If
On Error GoTo 0名前そのものもよく悪さをしますが、名前を削除するときにも結構悪さをします。
なのでエラーが出た時の処理をしっかり入れておきます。
Err.Number直前はエラーNo.です。
Err.Numberが0でないとき=エラーが出たときerrorNamesにエラーが出たセルの名前を格納しています。
格納したらErr.Clearでリセットし、If文を抜け、エラーが出た名前をユーザーに伝えています。
この処理はよく出るので書けるようになりましょう。
On Error Resume NextからOn Error GoTo 0までがセットです。











コメントを残す