2013-06-06 6 views
6

Очень новый для VBA в Excel, получил запрос на валидацию на смену ячеек и немного застрял.VBA Стоп-расчет ячеек

Таким образом, пользователю нужно ввести денежное значение в ячейку, допустим, D16, поэтому я подумал, что подключу к событию _Change на Рабочем листе, который работает достаточно хорошо.

Однако мне нужно, чтобы остальная часть рабочего листа не завершила расчет, когда запись была отправлена ​​в D16, в основном, когда введено 500000, другие ячейки обновляются со значениями из другого листа.

Мой код

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Target = Range("D16") Then 

     Dim numeric 
     numeric = IsNumeric(Target) 


     If numeric = False Then 

      MsgBox "error" 
      Exit Sub 

      /// this is where I need to "stop" the calculations from firing 

     End If 

    End If 

End Sub 
+0

@ Сантош, да, ни одна из этих проблем не решена нашей проблемой. Мы завершили доступ к каждому доступному событию и вызвали событие Worksheet_Change в каждом из них. Странный сценарий, я знаю, я не могу объяснить, почему, но это сработало. – JadedEric

ответ

13

Надеюсь, что код ниже поможет. Вам нужно вставить это в раздел кода листа.

Private Sub Worksheet_Change(ByVal Target As Range) 

    On Error Resume Next 

    Application.EnableEvents = False 
    Application.Calculation = xlCalculationManual 

    Dim rng As Range 
    Set rng = Range("D16") 

    If Not Intersect(Target, rng) Is Nothing And IsNumeric(Target) Then 

     If Target.Value >= 500000 Then 
      MsgBox "Value is greater than 500000" 
     End If 


    End If 


    Application.EnableEvents = True 
    Application.Calculation = xlCalculationAutomatic 
End Sub 
9

Использование Application.Calculation = xlCalculationManual.

Не забудьте снова включить его: Application.Calculation = xlCalculationAutomatic.

Смежные вопросы