繁体   English   中英

VBA 如果单元格包含某个字母,则自动添加注释的代码

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

我上周刚开始学习 VBA,现在我正在尝试解决以下问题:如果用户输入某个字母(并且只有这些指定的字母),则应自动将注释添加到所选单元格。 评论应该包含一个小的“标题”,然后是一个解释性文本,由用户输入。 显示的代码确实有效,但仅适用于我测试它的第一个单元格。 所以,当我第一次执行它时,评论会自动出现我想要的指定文本,但在下一个单元格中却没有。 即使重新启动 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

我已指定“工作表”和“更改”。

还有一个额外的问题,我会感兴趣:有没有可能,excel 会在评论生成后自动选择评论,这样用户就可以输入一些解释性信息,而无需手动输入 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

只要记住将代码放在您希望它发生的工作表上,它似乎也区分大小写。

您可以在模块的声明部分(顶部)使用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即可更改该属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM