2013-01-08 57 views
1

我有这个用于在用户插入C或P时在Excel工作表上输入评论,并且我需要在编辑后隐藏评论。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 

回答

2

一些问题与代码:

  • Select Case Range(Target.Address)没有意义 - 它采用Target范围,需要其地址并建立来自该地址的范围,它指向原来Target范围,最后VB取得该范围的默认属性,因为它没有在对象引用上下文中使用。所以应该用Target.Value代替整个事情。
  • 后来同样的事情发生在minhaCelula
  • "C""P"下的代码是一样的,应该放在同一个Case分支下。
  • 冒号未在VB的Select Case中使用。
  • 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停止管理评论的可见性:为

所以应该rewriteen。要将管理员留在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