Vba 如果范围中的单元格包含值,则在相邻单元格中插入注释

Vba 如果范围中的单元格包含值,则在相邻单元格中插入注释,vba,excel,Vba,Excel,我希望标题能澄清目标。我所有的尝试都以惨败告终,例如: Private Sub Worksheet_Change(ByVal Target As Range) With Range("A1:A10") = "blah" Range("A1:A10").Offset(0, 1).AddComment "fee" Range("A1:A10").Offset(0, 2).AddComment "fi" Range("A1:A10").Offs

我希望标题能澄清目标。我所有的尝试都以惨败告终,例如:

Private Sub Worksheet_Change(ByVal Target As Range)

    With Range("A1:A10") = "blah"
        Range("A1:A10").Offset(0, 1).AddComment "fee"
        Range("A1:A10").Offset(0, 2).AddComment "fi"
        Range("A1:A10").Offset(0, 3).AddComment "fo"
    End With

End Sub
我也尝试过这种方法:

Private Sub Worksheet_Change(ByVal Target As Range)

    For Each cell In Range("A1:A10")
        If cell.Value = "blah" Then
            cell.Value.Offset(0, 1).AddComment "fee"
            cell.Value.Offset(0, 2).AddComment "fi"
            cell.Value.Offset(0, 3).AddComment "fo"
        End If
    Next

End Sub
这是:

Private Sub Worksheet_Change(ByVal Target As Range)

    With Range(Target.Offset(0, 1).Address).AddComment
        Range(Target).Offset(0, 1).Comment.Visible = False
        Range(Target).Offset(0, 1).Comment.Text Text:="fee"            
    End With

End Sub
请注意,该代码旨在作为插入到特定工作表中的事件处理程序。我显然误解了VBA语法中有关范围的内容。如果您能为这些潜艇提供任何帮助,我们将不胜感激

跟进:蒂姆建议使用工作表进行计算,效果很好。我通过Tim代码的最后一个变体实现了我的目标:

Private Sub Worksheet_Calculate()

    Dim rng As Range, cell As Range

    'see if any changes are in the monitored range...
    Set rng = Range("A1:A10")

    If Not rng Is Nothing Then

        For Each cell In rng.Cells
            If cell.Value = "blah" Then
                cell.Offset(0, 1).AddComment "fee"
                cell.Offset(0, 2).AddComment "fi"
                cell.Offset(0, 3).AddComment "fo"
            End If
        Next

    End If

End Sub

蒂姆,谢谢你的密码。它按预期运行,你应该得到表扬。然而,我在最初的请求中没有预料到一个复杂的情况。在上面,条件触发器字符串“blah”不是简单的用户类型条目,而是由应用程序工作表函数生成的。这会导致事件处理程序代码不运行。当函数替换为用户键入的字符串时,代码可以工作。如果“blah”是由工作表函数生成的,您知道如何修改代码以使其工作吗?Regardsy您可以使用工作表\u calculate事件并检查感兴趣范围内的值。由于没有目标参数,您可以在A1:A10中循环通过单元格。谢谢,蒂姆。仍在学习这一切意味着什么,但欣赏其中的指点。
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rng As Range, cell as Range

    On Error Goto haveError

    'see if any changes are in the monitored range...
    Set rng = Application.Intersect(Target, Me.Range("A1:A10"))

    If Not rng is Nothing Then
    'Next line prevents code updates from re-triggering this...
    '  (Not really needed if you're only adding comments)
    Application.EnableEvents=False
    For Each cell In rng.Cells
        If cell.Value = "blah" Then
            cell.Offset(0, 1).AddComment "fee"
            cell.Offset(0, 2).AddComment "fi"
            cell.Offset(0, 3).AddComment "fo"
        End If
    Next
    Application.EnableEvents=True

    End If

    Exit Sub

haveError:
    msgbox Err.Description
    Application.EnableEvents=True



End Sub