2013-04-24 58 views
1

我运行代码VBA测试是否细胞右边是小于0,如果是,则使活动单元格0。这应该运行在小区被输入。这是我到目前为止有:VBA计算单元格值之前如果/然后声明

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 2013-04-24 14:05:16

回答

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 2013-04-24 14:08:21

+0

@ user2232633“Worksheet_change”事件也会触发每个单元格的“更改”,所以这不会更低效。 – 2013-04-24 14:09:19

+0

@ user2232633:'如果没有相交(目标,范围(“C7:C27”))是没有什么Then'照顾它不会在代码太深... – 2013-04-24 14:09:21

相关问题