我有这个用于在用户插入C或P时在excel工作表上输入注释,我需要在编辑后隐藏注释。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A1:S1000")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
Select Case Range(Target.Address)
Case "C":
minhaCelula = Target.Address
Range(minhaCelula).AddComment ("")
Range(minhaCelula).Comment.Visible = True
Case "P":
minhaCelula = Target.Address
Range(minhaCelula).AddComment ("")
Range(minhaCelula).Comment.Visible = True
End Select
End If
End Sub
答案 0 :(得分:2)
该代码存在一些问题:
Select Case Range(Target.Address)
没有意义 - 它需要Target
范围,获取其地址并从该地址创建一个范围,该范围指向原始Target
范围,最后是VB获取该范围的默认属性,因为它未在对象引用上下文中使用。所以整个事情应该用Target.Value
替换。minhaCelula
。"C"
和"P"
下的代码相同,应放在同一Case
分支下。Select Case
。{/ li>中使用冒号
AddComment
应该被称为without parentheses。更好的是,您应该从AddComment
返回对添加的注释的引用中受益,因此您可以直接使用它(在这种情况下,您必须保留括号)。所以应该重写为:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Me.Range("A1:S1000"), Target) Is Nothing Then
Select Case Target.Value
Case "C", "P"
Target.AddComment("").Visible = True
End Select
End If
End Sub
至于问题,当您使用Comment.Visible
时,Excel会停止管理评论的可见性。要将管理保留在Excel端,请改为显示注释的形状:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Me.Range("A1:S1000"), Target) Is Nothing Then
Select Case Target.Value
Case "C", "P"
With Target.AddComment("").Shape
.Visible = msoTrue
.Select
End With
End Select
End If
End Sub