Excel MsgBox with VBA 用于多个链接范围

Excel MsgBox with VBA for multiple linked range

我需要一些帮助来解决 excel 问题。

它是以下两个问题的组合:

1) Excel - Popup message with sound alert when cell value meets certain criteria

2) VBA code to show Message Box popup if the formula in the target cell exceeds a certain value

Sheet1 中,我有一系列的产品和销售数字。 示例:Sheet1

Sheet2 中,我有多个 sumif() 函数列。示例:Sheet2。 它包含 (A:A) 中的一列名称和 (B:B) & (C:C) 中的数据,这些数据链接到其他 sheet 中的单元格。当 B 列中的任何单元格的值超过 20 或 C 列超过 40 时,我想要一个弹出通知说("Text in column A" 已售出 > 20)。

例如:如果 "B" 列中的一个单元格值更新为 33(即 >20)并且 [=] 列中的相应单元格值51=] 包含文本 "Charlie",excel sheet 应该弹出消息说 "Charlie sold is > 20"。

下面的 VBA 代码实现了这个 如果 它是原始数据。但是,当单元格链接到来自其他 sheet 的数据时,它不起作用,就像本工作簿的情况一样。

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.column = 2 and target.value > 1 Then
       MsgBox target.offset(0,-1).text & " sold is > 20"
   End If
End Sub

此替代代码适用于从其他 sheet 链接的数据,但它仅适用于特定单元格,而不适用于整列。

Private Sub Worksheet_Calculate()

If Sheets("Sheet2").Range("B2").Value > 20 Then
    MsgBox "B2 is >20", vbOKOnly
End If

End Sub

我想要实现的是这个:当我在 Sheet1 中输入我的原始数据时,Sheet2 列(B:B)和列(C:C)中的数字) 得到更新。一旦 Sheet2 列(B:B)中的任何单元格超过 20 或列(C:C)超过 40,将弹出一个通知,链接回列 A 文本,例如 MsgBox target.offset(0,-1).text & " sold is > 20"。有没有办法结合以上两个代码来实现这一点? 也欢迎任何替代解决方案,谢谢!

比较摘要中的所有总和table

Private Sub Worksheet_Calculate()

    Dim RangeToCheck As Range
    Dim Cell As Range
    Set RangeToCheck = Sheets("Sheet2").Range("B2:B5") 'See comment #1

    For Each Cell In RangeToCheck.Cells
        With Cell
            If .Value2 > 20 Then
                MsgBox "Product: " & .Offset(columnoffset:=-1).Value2 & _
                " in cell: " & .Address & " is " & .Value2 & ">20", vbOKOnly
            End If
        End With
    Next

End Sub

评论

  1. 我建议将 Sheet2 上的范围改为 Excel table 并改用 ListObjectListcolumns
  2. 题外提示:你也可以使用一些计数器,将范围放入一个VBA数组中并循环遍历数组,这样会比一个接一个地引用sheet单元格更快。参见 Writing efficient VBA UDFs (Part 1)