2013-04-24 2 views
1

Я запускаю код в VBA, чтобы проверить, имеет ли ячейка справа меньше 0, а если это так, то сделать активную ячейку 0. Это должно выполняться, когда ячейка . Вот то, что я до сих пор:VBA Calculate Cell Value Before If/Then Statement

Private Sub worksheet_change(ByVal target As Range) 
If Not Intersect(target, Range("c7:c27")) Is Nothing Then isNegative 
End Sub 

, а затем

Sub isNegative() 
Dim cell As Range 
If ActiveCell.Offset(1, 0).Value < 0 Then 
ActiveCell.Value = 0 
End If 
End Sub 

Но то, что я предполагаю, что происходит, что он проверяет данные перед вычислением. Как это исправить?

+0

'Application.Calculate'? – Gaffi

ответ

2

Это должно работать, когда ячейка введена.

Нравится?

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Dim aCell As Range 

    If Not Intersect(Target, Range("C7:C27")) Is Nothing Then 
     For Each aCell In Range("C7:C27") 
      If aCell.Offset(1, 0).Value < 0 Then aCell.Value = 0 
     Next 
    End If 
End Sub 
+0

Хорошо, я побежал и работал, но я подумал, что это может быть более эффективным, не запуская его в каждой ячейке. Есть ли способ сделать это более эффективно? – lebout

+0

@ user2232633 событие «Worksheet_change» срабатывает и в каждой ячейке 'change', так что это не будет менее эффективным. –

+0

@ user2232633: 'If Not Intersect (Target, Range (« C7: C27 »)) ничего не значит», заботится о том, что он не будет слишком глубоко в коде ... –

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