VBA 单元格包含特定字母时自动添加评论的代码

VBA Code to automatically add a comment if a cell contains a certain letter

我上周刚开始学习VBA,现在我正在尝试解决以下问题:如果用户输入某个字母(并且只输入这些指定的字母),则应该自动添加评论到selected 单元格。注释应包含一个小 "header",然后是解释性文本,由用户输入。 显示的代码确实有效,但仅适用于我测试过的第一个单元格。因此,当我第一次执行它时,评论会按照我的预期自动出现在指定的文本中,但在下一个单元格中却没有。即使重新启动 Excel 也无济于事 - 所以现在即使是第一个单元格也不会创建评论。这就是我困惑的原因。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim x

Application.EnableEvents = False

If Target.Value = "" Then

    Application.Undo
    x = Target.Value
    Target.Value = ""
    On Error Resume Next

    If (x = "A") Or (x = "B") Or (x = "C") Or (x = "D") Or (x = "E") Then Target.Comment.Delete
    On Error GoTo 0   

ElseIf Target.Value = "A" Then
    Target.AddComment ("explanationA: ")

ElseIf Target.Value = "B" Then
    Target.AddComment "explanationB: "

ElseIf Target.Value = "C" Then
    Target.AddComment "explanationC: "

ElseIf Target.Value = "D" Then
    Target.AddComment "explanationD: "

ElseIf Target.Value = "E" Then
    Target.AddComment "explanationE: "

End If
End Sub

我指定了 "Worksheet" 和 "Change"。

还有一个我会感兴趣的附加问题:是否有可能 excel 在评论生成后自动 select 发送评论,以便用户可以输入一些解释性信息而不需要手动 select 注释?

感谢帮助!非常感谢您!

像下面这样快速简单的事情;

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Select Case Target.Cells
    Case Is = "A": Target.AddComment ("explanationA: ")
    Case Is = "B": Target.AddComment ("explanationB: ")
    Case Is = "C": Target.AddComment ("explanationC: ")
    Case Is = "D": Target.AddComment ("explanationD: ")
    Case Is = "E": Target.AddComment ("explanationE: ")
End Select
On Error Resume Next
End Sub

请记住将代码放在您希望它发生的 sheet 上,它似乎也区分大小写。

您可以在模块的声明部分(顶部)使用 Option Compare Text 以允许对整个模块进行不区分大小写的比较。

子例程"MyCompare"中的代码虽然相同,但结果不同:

Sub MyCompare

    Debug.print "a" = "A"
    ' Prints False

End Sub

Option Compare Text

Sub MyCompare

    Debug.Print "a" = "A"
    ' Prints True

End Sub

但是无论如何,让我们来解决您的实际问题。它与您的代码中的这一行有关:

Application.EnableEvents = False

请注意,您的代码第一次运行的原因是您捕获了 Worksheet_Change 事件。但是现在您只是禁用了此代码中的事件并且再也没有将其重新打开,因此您将无法再 运行 您的 Worksheet_Change 子例程。

请确保在退出代码之前将其重新打开。此外,明智的做法是以启用事件的方式处理错误,而不是过早地停止代码,否则代码会一直处于禁用状态。

我通常在没有 运行 启用 Sub 的情况下启用事件的方法是使用调试 window。在 VBE 中按 Ctrl + G 打开此 window,然后在 window 中只需键入 Application.EnableEvents = True 并按 Return 并且您刚刚更改了 属性.