带有VBA的Excel MsgBox用于多个链接的范围

我需要一些有关excel问题的帮助。

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

1) Excel – 当单元格值符合特定条件时,popup消息并发出声音警报

2) 如果目标单元格中​​的公式超出特定值,则显示“消息框”popup窗口的VBA代码

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

Sheet2中 ,我有多列sumif()函数。 示例: Sheet2 。 它包含(A:A)中的一列名称和(B:B)&(C:C)中的数据,它们链接到其他工作表中的单元格。 当列B中任何单元格的值超过20或C列超过40时,我会popup一个通知(“列A中的文本已售出> 20)”。

例如 :如果列“B”中的一个单元格值更新为33(即> 20),并且列“A”中的对应单元格值包含文本为“查理”,则Excel表格应该popup消息“Charlie sold是> 20“。

下面的VBA代码完成这个IF如果它是原始数据。 但是,单元格链接到其他工作表的数据时不起作用,如本工作簿的情况。

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 

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

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

我想要实现的是 :当我在Sheet1中input我的原始数据时,Sheet2列(B:B)和列(C:C)中的数字得到更新。 一旦Sheet2列(B:B)中的任何单元格超过20个或列(C:C)超过40,就会popup通知链接到列A文本,如MsgBox target.offset(0,-1).text & " sold is > 20" 。 有没有办法把上面的两个代码结合起来呢? 欢迎任何替代解决scheme,谢谢!

比较汇总表中的所有总和

 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. 我build议将Sheet2上的范围转换为Excel表格,并使用ListObjectListcolumns来代替。
  2. closures主题提示:你也可以使用一些计数器,把范围放到一个VBA数组中,并循环访问数组,这将比一个接一个地引用表单元更快。 请参阅编写高效的VBA UDF(第1部分) 。