gpt4 book ai didi

vba - 如何在单元格自动更改值时创建警报?

转载 作者:行者123 更新时间:2023-12-03 02:52:40 26 4
gpt4 key购买 nike

在我的一张工作表中,单元格 F2:F18 中的值是"is"或“否”

我基本上想做的是创建一个弹出窗口,当它们发生变化时会提醒我。

最初我有以下内容,看起来工作正常,但是因为是/否值是由公式生成的,所以它不起作用:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value = "Yes" Then
MsgBox "Cell " & myRange.Address & " is now equal to Yes"
End If
End Sub

Sub BandingAlert()
Dim myRange As Object
Set myRange = ActiveSheet.Range("F2:F18")
Call Worksheet_Change(myRange)
End Sub

经过一番研究,我发现我需要使用 Worksheet_Calculate 来代替。我现在使用以下代码:

Private Sub Worksheet_Calculate()
Dim myRange As Object
Set myRange= ActiveSheet.Range("F2:F18")
If myRange.Value = "Yes" Then
MsgBox "Cell " & myRange.Address & " is now equal to Yes"
End If
End Sub

当是/否值更改时,我现在收到错误

Run-time error '13'; Type Mismatch

如果我调试代码,突出显示的行是:

If myRange.Value = "Yes" Then

有人可以帮我解决我哪里出错了吗?

编辑:每个单元格都需要自己的弹出窗口,因为我计划在每个弹出窗口中放置单元格特定信息

最佳答案

您需要一个额外的 Range 变量来迭代 Range 集合。

您的 myRange 变量是 F2:F18 之间的单元格集合。为了访问该范围内的每个单元格,您需要迭代它。

我添加了一个名为 cell 的额外 Range 变量,它充当迭代器。在 foreach 循环中,cell 变量是事件单元格。

StrComp()函数将当前事件单元格的值与“Yes”进行比较。 vbTextCompare 忽略大小写并逐字比较文本。

Private Sub Worksheet_Calculate()
Dim myRange As Range
Set myRange = ActiveSheet.Range("F2:F18")
Dim cell As Range
For Each cell In myRange
Evaluate (cell)
If StrComp(cell, "Yes", vbTextCompare) = 0 Then
MsgBox "Cell " & cell.Address & " is now equal to Yes"
End If
Next
End Sub

每次重新计算工作表时,F2:F18 范围内的每个 Yes 都会向您显示一个 MsgBox。一段时间后它可能会变得有点烦人,但这就是您正在寻找的,不是吗?

关于vba - 如何在单元格自动更改值时创建警报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19002114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com