excel - 如果一个单元格的值超过另一个单元格的值,则显示消息框弹出窗口的 VBA 代码

标签 excel vba

我在 Excel 中有一个场景,需要一些 vba 代码。我是一个相对新手,在寻找解决方案时已经走进了死胡同。

例如,用户在单元格 A1 中输入一个数值。

然后,他们还必须在单元格 A5、A6、A7 和 A8 中输入值。

使用通用 Excel SUM 函数,该总和显示在单元格 A9 中。

尽管可以接受零 ('0') 输入,但 A5:A8 单元格均不能留空。

A9 的值可以小于、等于但不能超过 A1 中的值。

如果 A9 超过 A1,则必须弹出错误消息以提醒他们出现这种情况。

无法输入字母字符。如果出现错误,则会弹出一条错误消息来提醒他们。

输入的数字必须介于 0 到 9,999,999 之间。如果他们不这样做,则会弹出一条错误消息来提醒他们。

我得到了一段 vba 代码(如下),我将其用于类似的目的,效果非常好。然而,我无法弄清楚如何合并代码,如果 A9 中的值超过 A1,该代码将识别并返回错误消息。这是我尝试做的,但我知道这是错误的!代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Not Intersect(Target, Range("A9")) Is Nothing Then
    Application.EnableEvents = False
    For Each c In Intersect(Target, Range("A9"))
        If IsEmpty(c) Then
            Application.EnableEvents = True
            Exit Sub
        End If
        If Not VarType(c.Value2) = vbDouble Or c.Value < 0 Or c.Value > 9999999 Then
            MsgBox "Entry in cell " & c.Address(0, 0) & " must be a number from 0 and 9,999,999"
            Application.Undo
        ElseIf WorksheetFunction.Count(Range("A9")) = 1 And _
            WorksheetFunction.Sum(Range("A9")) > Range("A1").Value Then
            MsgBox "The sum of A99 cannot exceed A1 when all entries are completed"
            Application.Undo
        End If

如果有人能帮助我解决这个问题,我将不胜感激!!

卡尔

最佳答案

在我看来,你的Worksheet_Change事件宏应该处理 A1 和 A5:A8 的更改,而不是 A9。如果 A5:A8 中的值符合条件,您可以对照 A1 检查它们的总计。

调整Intersect method(s)后,我用过 Select Case statement组织各种逻辑条件。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1, A5:A8")) Is Nothing Then
        On Error GoTo bm_Safe_exit
        Application.EnableEvents = False
        Dim c As Range
        For Each c In Intersect(Target, Range("A1, A5:A8"))
            If Application.Count(Range("A1, A5:A8")) < 5 Then
                Range("A9") = vbNullString
            Else
                Range("A9").Formula = "=SUM(A5:A8)"
                Select Case Range("A9").Value2
                    Case Is > Range("A1").Value2
                        MsgBox "The sum of A9 cannot exceed A1 when all entries are completed"
                        Range("A9", c).ClearContents
                        GoTo bm_Safe_exit
                    Case Is < 0, Is >= 10 ^ 7
                        MsgBox "Entry in cell " & c.Address(0, 0) & " must be a number from 0 and 9,999,999"
                        Range("A9", c).ClearContents
                        GoTo bm_Safe_exit
                    Case Else
                        'do nothing - A9 is oh-key-doh-key
                End Select
            End If
        Next c
    End If
bm_Safe_exit:
    Application.EnableEvents = True
End Sub

关于excel - 如果一个单元格的值超过另一个单元格的值,则显示消息框弹出窗口的 VBA 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34812392/

相关文章:

Excel VBA 复选框单击和更改事件相同吗?

excel - 在两组之间寻找唯一性

arrays - 将 Variant 数组传递给 Application.Index 方法时,Excel VBA 运行时错误 '13' : Type mismatch,

python - xlsxwriter 正在创建损坏的文件

excel - 将 Jenkins 报告导出到 Excel

ms-access - 为什么组合框向导选项 "Find a record on my form"并不总是可用?

excel - 从文本中解析子字符串

java - Apache POI 注释 Excel

excel - 如何在 Excel 中使用 VBA 将附件添加到电子邮件

java - 从 Java 调用 Access 中的 VBA 函数