Все,
Я столкнулся с ошибкой с некоторым кодом VBA в макросе Excel.Вот рабочий процесс, который я пытаюсь:
- У меня есть модуль, который запускает код для создания нового листа, форматирования его и добавления набора значений
- в этом же модуле.определить диапазон ячеек на основе последней заполненной строки (которая всегда будет отличаться в зависимости от предыдущих шагов)
Как только я знаю этот диапазон, я использую приведенный ниже код для записи во вновь созданный модуль кода рабочих таблицтак что я могу настроить '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
Код работает и записывает следующее в модуль кода указанного рабочего листа.:
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