如何检测Excel vba中列值的更改

时间:2017-10-21 14:59:39

标签: vba excel-vba excel

有没有办法找到列中的任何值是否小于允许的限制? 例如: 我有一个A列,它在B列中进行任何更改效果值时都有可变数据。

我想设置约束,以便如果列A使列B中的任何值小于7(通过增加或减少列A中的值),则列A中的该值将被拒绝,而列A值将不会进一步更新(增加或减少)。最后一个值将被设置为final。

所以这里的概念是遍历A列中的每一行并尝试增加或减少值,直到满足条件。

注意:A列中的值必须为正

示例1:

Please follow this image link  下面附有一份样本excel表。

我只想要一种方法来调整A列中的值,以便B列值处于允许的限制范围内。 (即不低于7)。这可以通过更改A列中的值然后检查B列的所有行的允许限制来实现,为此我需要在每次更改值时循环遍历B列中的每一行,这可能需要更多的处理时间(减慢VBA)。我需要在没有循环的情况下实现这一点。

TIA

1 个答案:

答案 0 :(得分:1)

您可以尝试使用下面的基于工作表的事件来捕获A列中发生的更改。右键单击要执行此操作的工作表选项卡,然后粘贴下面的代码。 在备份上进行测试。

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, rngLast As Range
    If Target.Column = 1 Then
        Set rngLast = Cells.Find("*", [A1], xlFormulas, xlWhole, , xlPrevious)
        Application.EnableEvents = False
        For Each rng In Range("B2:B" & rngLast.Row) '\\ Adjust Start Row of Column B
            If rng.Value < 7 Then
                MsgBox "Value going below specified limit!", vbExclamation
                Application.Undo
            End If
        Next
        Application.EnableEvents = True
    End If
    End Sub