VBA - 创建一个msgbox,只有在配方单元格发生变化时才显示一次

时间:2017-06-13 06:22:35

标签: excel-vba vba excel

我是VBA的新手,我正在尝试创建一个msgbox,如果在列中进行了更改,它将响应。此列的结果由公式运行,结果以文本形式显示。例如,公式是检查两个余额。如果它们匹配,配制的细胞将显示"匹配",如果它们没有,它将显示" Not Matched"代替。当它从"匹配"为了"不匹配",我想要一个msgbox来显示,以提醒谁做出了不正确的改变。但是,这就是问题,当我在下面运行我的代码时,msgbox会循环并且每次更改都会显示多次。我怎样才能让它只出现一次,因为#34;匹配"到"不匹配"。这是我的代码:

Private Sub Worksheet_Calculate()
     Dim rr As Range, r As Range
     Set rr = Range ("L6:L57").Cells.SpecialCells(xlCellTypeFormulas)
     For Each r in rr
          If r.Value = "Not Matched" Then
          MsgBox "Please Checked Date Entered", vbExclamation
     End If
     Next r
End Sub

请帮助!

非常赞赏。

2 个答案:

答案 0 :(得分:0)

试试此代码

Private Sub Worksheet_Calculate()
  Dim rr As Range, r As Range
  Dim bNotMatched as Boolean
  Set rr = Range ("L6:L57").Cells.SpecialCells(xlCellTypeFormulas)
  bNotMatched = false
  For Each r in rr
      If r.Value = "Not Matched" Then
           bNotMatched = true
      End If
  Next r

  If bNotMatched  = true then
     MsgBox "Please Checked Date Entered", vbExclamation
  End if
End Sub

答案 1 :(得分:0)

我的想法是获得具有静态值的“匹配/不匹配”列的副本,并且每次检查rr中的“未匹配”值时,您都可以将该值与副本进行比较。如果两者都是“未匹配”,请转到下一个r。如果没有,则在复制列中将“匹配”更改为“未匹配”并显示msgbox。