Как исправить появление msgbox дважды при изменении результата формулы ячейки? - PullRequest
0 голосов
/ 05 июня 2019

Я хочу, чтобы окно msgbox отображалось только один раз, когда результат формулы изменяется в моей таблице ("K2:K5"). Прямо сейчас это показывает дважды.

В этом диапазоне у меня есть excel-формулы. Формула: H12*10

Эти формулы относятся к раскрывающемуся списку (список, который я создал из «проверки данных» в меню данных вкладки Excel).

Раскрывающийся список находится в cell H12. Значения в раскрывающемся списке относятся к диапазону (D15:D17)

Однако я заметил, что msgbox появляется один раз, когда я удаляю выпадающий список и вводим значения вручную в H12.

благодарен за любую помощь в этом

Private Sub Worksheet_Calculate()
Dim Xrg As Range
Set Xrg = Range("K2:K5")
If Not Intersect(Xrg, Range("K2:K5")) Is Nothing Then
    MsgBox "Hi"
End If
End Sub

Я также пытался добавить Application.enableEvents к коду, но безуспешно.

Private Sub Worksheet_Calculate()
Dim Xrg As Range
Set Xrg = Range("K2:K5")
Application.EnableEvents = False
If Not Intersect(Xrg, Range("K2:K5")) Is Nothing Then
    MsgBox "Hi"
End If
Application.EnableEvents = True
End Sub

1 Ответ

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

Ваш текущий код не имеет добавленной стоимости для события Worksheet_Calculate из-за сравнения двух абсолютно одинаковых диапазонов и определения, пересекаются ли они. Это всегда будет так. Ваш код будет иметь такой же эффект, как:

Private Sub Worksheet_Calculate()
    MsgBox "Hi"
End Sub

Если у вас на рабочем листе больше функций, которые могли бы вызвать нежелательное событие, выходящее за пределы диапазона K2:K5, вам следует просмотреть событие Worksheet_Change и вернуть окно сообщения, когда ячейка, на которую вы ссылаетесь, изменила значение.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$H$12" Then MsgBox "Hi"
End Sub

Выберите любой из них, но не используйте оба, потому что в итоге вы получите два сообщения msgbox

...