Excel宏 - 编辑后隐藏注释

时间:2013-01-08 18:47:28

标签: excel vba

我有这个用于在用户插入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

1 个答案:

答案 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