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
评论
- 我建议将 Sheet2 上的范围改为 Excel table 并改用
ListObject
和 Listcolumns
。
- 题外提示:你也可以使用一些计数器,将范围放入一个VBA数组中并循环遍历数组,这样会比一个接一个地引用sheet单元格更快。参见 Writing efficient VBA UDFs (Part 1)。
我需要一些帮助来解决 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
评论
- 我建议将 Sheet2 上的范围改为 Excel table 并改用
ListObject
和Listcolumns
。 - 题外提示:你也可以使用一些计数器,将范围放入一个VBA数组中并循环遍历数组,这样会比一个接一个地引用sheet单元格更快。参见 Writing efficient VBA UDFs (Part 1)。