2013-04-24 2 views
1

VBA에 코드를 실행하여 오른쪽의 셀이 0보다 작은 지 테스트하고, 그렇다면 활성 셀을 0으로 만듭니다. 입력됩니다.VBA If/Then 문 앞에서 셀 값 계산

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 모든 셀'change'에서'Worksheet_change' 이벤트가 발생하므로 효율성이 떨어지지는 않습니다. –

+0

@ user2232633 :'교차하지 않는다면 (대상, 범위 ("C7 : C27")) 아무 것도 없다.'코드에서 너무 깊어 보이지 않도록주의해야한다 ... –