1

当用户插入 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
4

1 回答 1

2

该代码的一些问题:

  • Select Case Range(Target.Address)没有意义 - 它获取Target范围,获取其地址并从该地址创建一个范围,该地址指向原始Target范围,最后 VB 获取该范围的默认属性,因为它没有在对象引用上下文中使用. 所以整个事情应该被替换为Target.Value.
  • 后来同样的事情发生了minhaCelula
  • "C"和下的代码"P"是一样的,应该放在同一个Case分支下。
  • VB 中不使用冒号Select Case
  • AddComment应该不带括号调用。更好的是,您应该受益于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
于 2013-01-08T19:08:21.793 回答