Как отлаживать простой Worksheet_Change - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь изменить значение ячейки для отображения в виде текста, который в противном случае объединяется в другую ячейку с использованием формулы; сценарий, похоже, работает, но сообщение об отладке продолжает появляться, вызывая сбой файла при многократной попытке.

Код, который я использовал, настолько прост, что я не могу понять, что с ним не так ...?

Private Sub Worksheet_Change(ByVal Target As Range)  
    Dim Note As Range
    Set Note = Sheets("Interface").Range("D2")

    Sheets("Intake Note").Range("G5").Value = Note
End Sub

Я ожидаю, что в ячейке G5 будет отображаться фактический текст, отображаемый в ячейке D2, который был объединен по формуле.

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Проблема заключается в том, что если этот Worksheet_Change находится в рабочем листе Intake Note, то любое изменение в этом рабочем листе снова вызовет событие. Так что это бесконечный цикл, потому что событие меняет ячейку ... запускает событие, которое меняет ячейку ... и т. Д.

Поэтому вам нужно отключить свойство Application.EnableEvents , прежде чем изменять ячейку в этом событии:

Private Sub Worksheet_Change(ByVal Target As Range)  
    Dim Note As Range
    Set Note = Worksheets("Interface").Range("D2")

    Application.EnableEvents = False
    Worksheets("Intake Note").Range("G5").Value = Note 'this line would trigger another Worksheet_Change event 
    Application.EnableEvents = True 
End Sub

Но я все еще считаю, что вы должны сделать все это в Worksheet.Calculate событие рабочего листа с именем Interface.

0 голосов
/ 24 июня 2019

Я считаю, что это должно быть:

Sheets("Intake Note").Range("G5").Value = Note.Value 
                                                     # instead of:
Sheets("Intake Note").Range("G5").Value = Note
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...