Изменение листа: Если значение ячейки в определенном диапазоне> c8 -> MsgBox и значение в другой ячейке (в которой есть функция)> 300 -> MsgBox - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужен макрос изменения рабочего листа, который выскакивает в окне сообщений всякий раз, когда значение, превышающее 8, помещается в одну из ячеек в диапазоне (F14: J26) и если значение, большее 300, помещается в ячейку C37.

Моя проблема в том, что ячейка C37 не заполняется вручную, а содержит формулу, то есть вычисление двух других ячеек.И я думаю, что Excel не распознает это как значение и поэтому ничего не делает, когда результат в этой ячейке превышает 300.

Option Explicit

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("F14:J26")) Is Nothing Then
            If Target.Value > 8 Then
                MsgBox "Was that accepted?"

          End If
    End If

   If Not Application.Intersect(Target, Range("C37")) Is Nothing Then
            If Target.Value > 300 Then
                 MsgBox "Was that accepted?"

          End If
    End If

End Sub

Первая часть кода работает как надо.Но вторая часть, как объяснено выше, не делает.Я также попытался разделить его на два отдельных кода, но это показывает ошибку.Любая помощь по этому вопросу будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

В дополнение к Ответ Геррита Я рекомендую расширить его следующим образом, чтобы он не потерпел неудачу, если кто-то вставит диапазон данных в F14: J26.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim AffectedRng As Range
    Set AffectedRng = Application.Intersect(Target, Range("F14:J26"))

    Dim FoundInvalidData As Boolean

    If Target.Parent.Range("C37").Value > 300 Then 
        FoundInvalidData = True
    ElseIf Not AffectedRng Is Nothing Then
        Dim Cel As Range
        For Each Cel In AffectedRng.Cells
            If Cel.Value > 8 Then
                FoundInvalidData = True
                Exit For
            End If
        Next Cel
    End If

    If FoundInvalidData Then
        MsgBox "Was that accepted?"
    End If
End Sub
0 голосов
/ 11 февраля 2019

У вас есть два (может быть, больше) возможных варианта:

  1. Используйте событие «Worksheet_Calculate» вместо события «Worksheet_Change».
  2. Если формула в C37исправлено, не контролируйте C37, а вместо этого исходные ячейки.
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("F14:J26")) Is Nothing Then
          If Target.Value > 8 OR Range("C37").Value > 300 Then
                MsgBox "Was that accepted?"

          End If
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...