答案1
这里有几件事需要考虑。您可以创建更多if
s,或用于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
当然,这是可行的,但也存在一些问题;
- 每次发生更改时都会运行所有检查。虽然目前这不是一个大问题,但如果检查的内容越多,文档的运行速度就越慢。
- 每次发生任何变化时它都会显示消息,直到导致消息的数字发生变化。
- 它没有说明哪个单元格导致了弹出窗口。
一种方法是使用函数,仅在相关单元格更改时运行代码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
,您可以通过对这些进行反向检查来缓解这种情况。此方法的另一个问题是,如果这些单元格是使用函数更改的,而不是直接更改单元格值,则可能不会触发此方法。
希望这些例子能对大家的想法有些许帮助。