在我的一个工作表中,我在单元格F2:F18
中有值Yes或No.我基本上想要做的是创建一个弹出窗口,当它们发生变化时会提醒我。
最初,我有以下内容,它似乎工作正常,但是因为公式生成了是/否值,它不起作用:
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
当Yes / No值改变时,我现在得到错误
运行时错误'13'; 类型不匹配
如果我调试我的代码,突出显示的行是:
If myRange.Value = "Yes" Then
任何人都可以帮我解决我出错的地方吗?
编辑:每个单元格都需要自己弹出,因为我打算在每个弹出窗口中放置单元格特定信息
答案 0 :(得分:2)
您需要额外的Range变量来迭代Range集合。
您的myRange
变量是F2:F18
之间的单元格集合。为了访问该范围内的每个单元格,您需要遍历它。
我添加了一个名为cell
的额外Range变量作为迭代器。在for each
循环中,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
每次重新计算工作表时,您都会在范围MsgBox
中为每个Yes
显示F2:F18
。它可能会在一段时间内变得有点烦人,但这就是你要找的东西,不是吗?
答案 1 :(得分:1)
试试这个
Private Sub Worksheet_Calculate()
Dim myRange As Range, aCell As Range
Dim CellAddr As String
Set myRange = ActiveSheet.Range("F2:F18")
For Each aCell In myRange
If aCell.Value = "Yes" Then
CellAddr = CellAddr & "," & aCell.Address
End If
Next
CellAddr = Mid(CellAddr, 2)
If Len(Trim(CellAddr)) <> 0 Then
MsgBox "Cell(s) " & CellAddr & " is now equal to Yes"
End If
End Sub