В Private Sub при изменении указанных ячеек c вызываемый макрос возвращается к закрытому sub без завершения макроса - PullRequest
0 голосов
/ 27 марта 2020

У меня есть Private sub, который вызывает специфический макрос c при изменении значения ячейки. Однако, когда он вызывает макрос, макрос запускает party, а затем автоматически переключается на начало private sub, не проходя все строки макроса. Не уверен, почему это происходит. Я не профессионал в VBA, но сделал много практики. Извините, если это звучит глупо. Спасибо!

С уважением, Аананд

Вот частный саб:


Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("K2:N2")) Is Nothing Then
Call RetrieveActual
End If

End Sub

Вот макрос:

Sub RetrieveActual()

Application.ScreenUpdating = False
Application.DisplayAlerts = False



Sheets("Actual hours Database").Select
Range("A904857").End(xlUp).Offset(0, 7).Select
ActiveCell.FormulaR1C1 = "=RC[-7]&RC[-6]"
Selection.Copy
Range(Selection, Selection.End(xlUp)).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

Sheets("Actual hours").Select
Range("C7").Select
ActiveCell.FormulaR1C1 = _
        "=IFERROR(INDEX('Actual hours Database'!C3:C5,MATCH('Actual hours'!R5C&'Actual hours'!RC35,'Actual hours Database'!C8,0),MATCH('Actual hours'!RC2,'Actual hours Database'!R1C3:R1C5,0)),0)"
Selection.Copy

Range("C7:AG9").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("C11:AG13").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("C15:AG17").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("C19:AG21").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("C23:AG25").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("C27:AG29").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("C31:AG33").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("C35:AG37").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("C39:AG41").Select
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False

Sheets("Actual hours Database").Select
Columns("H:H").ClearContents

Sheets("Actual hours").Select
Range("A1").Select

Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub

1 Ответ

1 голос
/ 27 марта 2020

Использование:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Not Intersect(Target, Range("K2:N2")) Is Nothing Then
        Call RetrieveActual
    End If
    Application.EnableEvents = True
End Sub

ПРИМЕЧАНИЕ:

В качестве стиля программирования для кода события я предлагаю:

  • всегда начинающий и заканчивающий код события с отключением / включением
  • , выходящий только из кода снизу
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...