VBA 中用于单元格比较的多个条目

VBA 中用于单元格比较的多个条目

在此处输入图片描述

我不太懂 VBA,但我想用 VBA 来弹出消息。想出一个简单的 VBA,然后想想如何继续。

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("D10").Value > Range("D11") Then
    MsgBox "Allowable Quota for Office, Exceeded! Please kindly Work From Home"
End If
End Sub

我有多个单元格需要比较,例如 F10 和 F11、H10 和 H11、L10 和 L11。如何在 VBA 中插入多个条目?谢谢。

答案1

这里有几件事需要考虑。您可以创建更多ifs,或用于or检查多个条件:

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D10").Value > Range("D11") Or _
    Range("F10").Value > Range("F11") Or _
    Range("H10").Value > Range("H11") Or _
    Range("L10").Value > Range("L11") Then
    MsgBox "Allowable Quota for Office, Exceeded! Please kindly Work From Home"
End If

End Sub

另一种方法是循环遍历所有的情况,如下所示:

Dim test_range As Range, cell As Variant
Set test_range = Range("D10, F10, H10, L10")
For Each cell In test_range
    If cell.Value > cell.Offset(1).Value Then
        MsgBox "Allowable Quota for Office, Exceeded! Please kindly Work From Home"
    End If
Next cell

当然,这是可行的,但也存在一些问题;

  1. 每次发生更改时都会运行所有检查。虽然目前这不是一个大问题,但如果检查的内容越多,文档的运行速度就越慢。
  2. 每次发生任何变化时它都会显示消息,直到导致消息的数字发生变化。
  3. 它没有说明哪个单元格导致了弹出窗口。

一种方法是使用函数,仅在相关单元格更改时运行代码intersect。像这样:

If Not Intersect(Target, Range("D10, F10, H10, L10")) Is Nothing Then
    If Target > Target.Offset(1) Then
        MsgBox "Allowable Quota for Office, Exceeded! Please kindly Work From Home"
    End If
End If

但是,在这种特定情况下,我们只会在更改 时收到错误10,而不是11,您可以通过对这些进行反向检查来缓解这种情况。此方法的另一个问题是,如果这些单元格是使用函数更改的,而不是直接更改单元格值,则可能不会触发此方法。

希望这些例子能对大家的想法有些许帮助。

相关内容