Excel VBA代码,用于在单元格包含特定字母时自动添加注释
上周我刚开始学习VBA,现在我正在尝试解决以下问题:如果用户键入某个字母(并且只键入这些指定的字母),则应将注释自动添加到选定的单元格中。注释应该包含一个小的“标题”,然后是一个解释性文本,由用户输入。 所显示的代码实际上是有效的,但只适用于我测试它的第一个单元。因此,当我第一次执行它时,注释会自动出现在我想要的指定文本中,但在下一个单元格中没有。即使重新启动Excel也没有帮助,所以现在即使是第一个单元格也不会创建注释。这就是为什么我感到困惑Excel VBA代码,用于在单元格包含特定字母时自动添加注释,excel,vba,comments,Excel,Vba,Comments,上周我刚开始学习VBA,现在我正在尝试解决以下问题:如果用户键入某个字母(并且只键入这些指定的字母),则应将注释自动添加到选定的单元格中。注释应该包含一个小的“标题”,然后是一个解释性文本,由用户输入。 所显示的代码实际上是有效的,但只适用于我测试它的第一个单元。因此,当我第一次执行它时,注释会自动出现在我想要的指定文本中,但在下一个单元格中没有。即使重新启动Excel也没有帮助,所以现在即使是第一个单元格也不会创建注释。这就是为什么我感到困惑 Private Sub Worksheet_Cha
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是否有可能在生成注释后自动选择注释,以便用户可以键入一些解释性信息,而无需手动选择注释
谢谢你的帮助!提前非常感谢 下面是一些简单快捷的东西
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
只需记住将代码放在您希望它发生的工作表上,它看起来也区分大小写。您可以在模块的声明部分(顶部)使用
选项比较文本
,以允许对整个模块进行不区分大小写的比较
虽然子程序“MyCompare”中的代码相同,但结果不同:
Sub MyCompare
Debug.print "a" = "A"
' Prints False
End Sub
但不管怎样,让我们谈谈你的实际问题。代码中有这一行:
Application.EnableEvents = False
请注意,代码第一次工作的原因是您捕获了工作表\u Change
事件。但是现在您只是禁用了此代码中的事件,并且从未重新打开它,因此您将无法再运行工作表\u Change
子例程
在退出代码之前,请确保将其重新打开。此外,明智的做法是以启用事件的方式处理错误,而不是过早地停止代码,这将使它们处于禁用状态
我通常在不运行Sub的情况下启用事件的方式是使用debug窗口。在VBE中按Ctrl+G打开此窗口,然后在窗口中键入
Application.EnableEvents=True
并按Return,即可更改该属性。使用InStr(1,UCase(Target.Value),“A”)>0而不是Target.Value=“A”等,以便查找字符串是否包含“A”而不是说它完全等于a。此外,这将检查是否输入了“A”或“A”。谢谢,但我只希望代码检查单元格中的字母“A”/“A”。因此,如果单元格包含例如“Ab”,则注释不应出现。只需将Target.Cells修改为UCase(Target.Value),并且不再区分大小写。是的,这将启用小写,如果您想要“A”或“A”,则只需将大小写更改为:case“A”,“A”:Target.AddComment(“explanationA:”)谢谢!您的答案对于编写更全面的代码非常有帮助!谢谢你的解释!这是我的错误。
Application.EnableEvents = False