• 締切済み

【Excel VBA】ワークシートの表示(続き)

すみません。 追記が出来なかったため、コードの続きをこちらに記載します。 For i = 1 To 12 If actsht = tmp(i) Then Flag = 1 Anser = MsgBox("翌月分シートを作成しますか?", vbYesNo + vbDefaultButton1, "確認") If Anser = vbYes Then ActiveSheet.Copy After:=ActiveSheet ActiveSheet.Name = tmp(i + 1) Sheets(actsht).Tab.ColorIndex = 2 Sheets(actsht).Range("B3").Value = Sheets("Sheet2").Range("A1").Value Sheets(actsht).Range("B4").Value = Sheets("Sheet2").Range("A2").Value ActiveSheet.Range("A2").Select Exit For ElseIf Anser = vbNo Then Exit For End If End If Next If Flag = O Then MsgBox ("新しいワークシートを作成出来ません。") End If If actsht = tmp(i) Then If Sheets(元データ).Visible = False Then Sheets(元データ).Visible = True End If End If End Sub

みんなの回答

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

コードを見る限り以下の問題がありそうです。 (1)Sheets(元データ)とはなんですか?変数指定がされていませんが。 →変数「元データ」に文字列型で値を格納 (2)12月がActiveSheetの場合、翌月の配列tmp(13)を参照時にエラーがでる。 →iの値によりIF構文でエラー回避 (3)If Anser = vbYes Then~End IF内でセル変更があるため、Worksheet_Changeがループする。 →変更の前後でApplication.EnableEvents = False/Trueによりイベント実行の回避 また、データの型宣言Dim~は省略せずに記述するようにしましょう。 コード内の変数が何を扱っているかが把握しやすくなります。 問題の件に関係ないと分かっている項目については省略しても構わないですが、 現象を再現できない場合は状態をこちらで検証することになりますので、コードのみの提示ではなく、プログラムの目的、データの仕様(セルの内容やシートの構成、扱うデータ等)の情報が必要になります。 また、提示されたコードはシートモジュールに記述されているのでしょうが、ブレークポイントを設けてWorksheet_Changeプロシージャ内の処理の流れ及び変数の値が意図したものになっているかデバッグされていますか?

caa29674
質問者

お礼

すみません。 QNo.9045833に集約させていただきましたので、 本トピックスは一旦クローズさせていただきます。 QNo.9045833にて回答させていただければと思います。 回答いただき、有難うございました。