• 締切済み

IF文の分岐が機能していない?

  初めて投稿させて頂きます。宜しくお願いします。  殆どVBA初心者です。  特定のセルに入力すると、シート名を固定のセル(S12)の文字列に変更するコードを書きました。  (S12は他のセルからの参照値を結合したものです。   B2”受注”+P2”5月”=S12”受注5月”がシート名に入ります) ネット検索で参照エラーやシート名の重複エラーを調べて自力で組みましたが、どこかがおかしいようでちゃんと機能していません。 (1)新しいシート名ならばエラーは出ず、シート名の変更が出来る (2)S12がエラー値であれば、シート名は変更されない これは狙い通りなのですが、 (3)重複シート名の場合、(2)を付けて変更する(これはエラーでマクロが止まります) (4)同じシートを何度か名前変更した時に、下のタグに無い名前も重複シートとして認識される この、(3)と(4)でマクロが止まり困っています。 (3)は重複でなければどのような処理でも問題ありません。(4)は(3)がクリア出来れば、あまり弊害はありませんがクリアできたら幸いです。 下記コードのどこが間違っているのか、教えて頂けませんでしょうか? Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim flag As Boolean, s As Variant If Intersect(Target, Range("B2:P2")) Is Nothing Then Exit Sub Else For Each s In Sheets If IsError(ActiveSheet.Range("S12").Value) Then Exit Sub Else If s.Name = ActiveSheet.Range("S12").Value Then Sh.Name = ActiveSheet.Range("S12").Value +"(2)" Exit Sub Else Sh.Name = ActiveSheet.Range("S12").Value Exit Sub End If End If Next s End If End Sub

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

最初のIF文 > If Intersect(Target, Range("B2:P2")) Is Nothing Then でF9キー押下してブレークポイント作成し、F8押下でステップ実行。 気になる変数にマウスカーソル当てれば、値をみることができるし、 いざとなったらイミディエイトで値設定(変更)も可能です。

kinnoji69
質問者

お礼

 迅速なご回答ありがとうございました。 教えて頂いた手順でチェックしたところ、コードの穴を発見することができました。 (一番問題だったのは、変数sの宣言をWorksheetにしていなかったので、ブック名が  sに代入されていた所でした) コードを組むときによりすっきりした実行手順も見えるようになったので、今後、 自力でマクロを作成する時に活用していきたいと思います。 大変勉強になりました。適切なご指導を頂きありがとうございました。

関連するQ&A