Запускать макрос при вставке новых данных в лист - PullRequest
0 голосов
/ 18 января 2020

Я очень плохо знаком с VBA и пытаюсь понять следующее.

Я хочу, чтобы моя подпрограмма запускалась всякий раз, когда новые данные вставляются (или изменяется значение) в ячейку A1 на листе CB.

Второй код отлично работает, когда он запускается один. Однако после вставки первого кода для запуска макроса после изменения A1 я получаю сообщение об ошибке «Ошибка времени выполнения 91: переменная объекта или переменная блока не установлена». Ошибка вызывается в этой строке кода "SHT.Range (" k "& I) .Value = U.Offset (-1, 0)"

Как я могу запустить второй макрос после вставки чего-либо или изменить в ячейке A1?

1.

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("A1:C" & ThisWorkbook.Worksheets("CB").UsedRange.Rows.Count)) Is Nothing Then
       Call LoopandIfStatement
    End If

End Sub

2.

Sub LoopandIfStatement()

Dim SHT As Worksheet
Dim I As Long
Dim O As Long
Dim U As Range

Set SHT = ThisWorkbook.Worksheets("CB")
MyLr = SHT.Cells(Rows.Count, 1).End(xlUp).Row

For I = 1 To MyLr

    If IsEmpty(SHT.Range("a" & I).Value) = False Then
        Set U = SHT.Range("A" & I)
        SHT.Range("k" & I).Value = SHT.Range("A" & I).Value
    Else
        SHT.Range("k" & I).Value = U.Offset(-1, 0)
    End If

Next I

For O = 2 To MyLr
    If SHT.Range("g" & O).Value = "Closing Balance" Then
        SHT.Range("l" & O).Value = SHT.Range("j" & O).Value
    End If
Next O

End Sub

1 Ответ

1 голос
/ 18 января 2020

Вероятно, что cra sh вызвано событием Change, инициированным изменением, инициированным вашей второй процедурой. Попробуйте подавить события во время выполнения этой процедуры.

Application.EnableEvents = False
Call LoopAndIfStatement
Application.EnableEvents = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...