首页 > 解决方案 > 当 sheet1 中的新数据输入更改另一个 sheet2 中的单元格值时自动弹出

问题描述

我对自动消息有疑问。我有一个宏,将数据条目放入 A 列的 sheet2(活动工作表)中。此条目在 sheet2 B 列中写入一个新条目。现在在 sheet1(不是活动工作表)中,此数据条目(sheet2 B 列)自动更新 sheet1 列 C 中的值(通过单元格内的公式)。如果 sheet1 列 C 达到特定阈值(例如 25%),则 sheet1 列 D 被更新并从“Ok”状态变为“Not Ok”状态。我希望每次 D 列状态从“Ok”变为“Not Ok”时都会显示一条警报消息。请问您有什么想法吗?我希望在你的帮助下!我刚刚在 sheet1 中尝试了 worksheet_change 并且它有效,即使我正在使用 sheet2,我如何才能自动显示弹出窗口?预防性感谢您的热心帮助!

在 sheet1 中,此代码工作正常:

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim KeyCells As Range
 Set KeyCells = Range("list") ' range between A to D column

Application.EnableEvents = False

If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
 If Cells(Target.Row, "D") = "Not Ok" Then
 MsgBox Cells(Target.Row, "A") & " is not Ok!"
 End If
End If

 Application.EnableEvents = True

End Sub

但是,如果我在工作簿中插入此代码,它就不起作用


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 Dim KeyCells As Range
 Set KeyCells = Range("list")

 Application.EnableEvents = False

If Sh.Name = "sheet1" Then
 If Not Application.Intersect(Target, Sh.Range("list")) Is Nothing Then
  If Cells(Target.Row, "D") = "Not Ok" Then
   MsgBox Cells(Target.Row, "A") & " is not Ok!"  
  End If
 End If
End If

 Application.EnableEvents = True

End Sub

标签: excelvba

解决方案


添加工作簿更改而不是工作表的事件,添加将检查活动工作表或该单元格中的 Not Ok 状态的代码的小片段。因此,只有在满足这些条件时,您才能收到警报。我在工作簿代码中尝试了此代码。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox ThisWorkbook.Sheets("Sheet2").Range("B1").Value
End Sub

在这里,代码适用于您工作簿中的所有工作表,因此其中任何一个的更改都会触发此事件。 在此处输入图像描述 您现在可以将代码修改为仅在“不正常”时发出警告,而不是全部发出警告。简单的 if 语句应该这样做。

就像是:

check=ThisWorkbook.Sheets("Sheet2").Range("B1").Value
if not(check="OK") then
MsgBox "Not OK"
end if

推荐阅读