全て、
Excel マクロの一部の VBA コードでエラーが発生しています。私が試みているワークフローは次のとおりです。
- コードを実行して新しいワークシートを作成し、フォーマットして、一連の値を追加するモジュールがあります
- この同じモジュール内で、入力された最後の行に基づいてセルの範囲を決定します (前のステップによって常に異なります)。
この範囲がわかったら、以下のコードを使用して、新しく作成したワークシート コード モジュールに書き込み、「change_event」を設定できるようにします。決定したばかりの範囲内の値が変更された場合にのみ、change_event をトリガーしたい:`
Dim Startline As Long Startline = 1 Dim x As Integer x = Errors.Count - 1 Dim rng As Range Set rng = Range("D" & LastRow - x & ":" & "D" & LastRow) With ThisWorkbook.VBProject.VBComponents(VRS.CodeName).CodeModule Startline = .CreateEventProc("Change", "Worksheet") + 1 .InsertLines Startline, "Dim rng As Range " Startline = Startline + 1 .InsertLines Startline, "Set rng = Range(" & """" & CStr(rng.Address) & """" & ")" Startline = Startline + 1 .InsertLines Startline, "If Target.Count > 1 Then Exit Sub" Startline = Startline + 1 .InsertLines Startline, "If Intersect(Target, rng) Is Nothing Then Exit Sub" Startline = Startline + 1 .InsertLines Startline, "MsgBox (""Value Changed!..."") " End With
コードは機能し、指定されたワークシートの codemodule に次の内容を書き込みます。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range("D58:D62")
If Target.Count > 1 Then Exit Sub
If Intersect(Target, rng) Is Nothing Then Exit Sub
MsgBox ("Value Changed!...")
End Sub`
このコードも機能し、範囲内のセルが変更されるとメッセージ ボックスが表示されます。ただし、VBE を閉じると、次のエラーが発生します。
Run-time error '9': Subscript out of range
デバッグを押すと、次の行に移動します。
With ThisWorkbook.VBProject.VBComponents(WS.CodeName).CodeModule
しかし、実際には次の行でエラーがスローされます。
Startline = .CreateEventProc("Change", "Worksheet") + 1