こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

マクロ実行時のエラー処理について

VBAのエラー処理の方法について教えて下さい。
エクセル2007を使用しています。
VBAでシートの名前を以下のように変更しようとしています。

シート名1 ← "1"
シート名2 ← "2"
シート名3 ← "3"

記述内容は以下の通りです。
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
On Error GoTo Err1
 For i = 1 to 3
  Sheet(i).Name = i  'Sheet(i)の名前を変数"i"に変更する。
Err1:
  Sheet(i).Delete   '上記処理でエラーが発生した場合はそのシートを削除する。
 Next i
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
 以上の処理を実行しようとした場合、同じ名前の既存シートが存在していたり、シート名に含まれてはいけない文字列が含まれていたりした場合、エラーが発生しますが、On Errorステートメントを使用してエラーが発生した場合の処理を実行したいのですが、1回目のエラーについてはOn Errorが働くのですが、2回目になるとOn Errorが働きません。
 2回目以降のエラーも1回目と同様に処理したいのですが、コードの記述の変更方法や又は他の処理方法を教えて下さい。

エラーの種類は以下の通りです。
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
実行時エラー'1004':

シートの名前をほかのシート、Visual Basicで参照されるオブジェクト ライブラリまたは
ワークシートを同じ名前に変更することはできません。
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
以上。

尚、On Error Resume Nextは処理を無視するだけなので使用したくありません。

以上、宜しくお願い致します。

投稿日時 - 2009-11-26 18:37:05

QNo.5478047

困ってます

質問者が選んだベストアンサー

>尚、On Error Resume Nextは処理を無視するだけなので・・・
あえて使ってみました、如何ですか?
On Error Resume Next
For i = 3 To 1 Step -1
  Sheets(i).Name = i 'Sheet(i)の名前を変数"i"に変更する。
  If Err Then
    Application.DisplayAlerts = False
    Sheets(i).Delete
    Err.Clear
  End If
Next i
Application.DisplayAlerts = True
On Error GoTo 0

投稿日時 - 2009-11-26 22:21:32

お礼

使い方次第ですね。
まだVBAはまだ使い始めたばかりなのでこれからも勉強したいと思います。
本当に有難う御座います。

投稿日時 - 2009-11-27 09:29:25

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

こんばんは。

コードの基本的な間違いはともかくとして、エラーが発生したら、シートを削除するという考え方が分かりません。本当に削除してしまってよいのでしょうか?

もし、6,5,4,3,2,1 としたら、シート名の6から4までが、エラーが発生してしまいますから、その3つを削除するのですか?また、左から、1,2,6,4,5,3 となっていたら、シート名の6を削除するのですか? Index にシート名をあわせることは問題ないにしても、それで削除してしまうのは、特別な理由があるのでしょうか?データが入っていたりすることもあるはずですが。

並べ替えるか、シート名を左から順に1,2,3,4,5,6にすればよいと思いますが、それは考えなかったのでしょうか?

>On Error Resume Nextは処理を無視するだけなので使用したくありません。

別にあえて使う必要はありませんが、処理を無視すると解釈しているなら、それだけではありませんから、あまり注文をつけないほうがよいと思います。

投稿日時 - 2009-11-26 22:39:15

あなたにオススメの質問