我在 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/