プロが教えるわが家の防犯対策術!

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は処理を無視するだけなので使用したくありません。

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

gooドクター

A 回答 (2件)

>尚、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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/27 09:29

こんばんは。



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

もし、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は処理を無視するだけなので使用したくありません。

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

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

gooドクター

人気Q&Aランキング