选择单元格时打开注释(可编辑)

时间:2018-03-20 20:37:16

标签: excel-vba vba excel

我觉得这是不可能实现的。我想自动右键单击一个单元格,然后单击单元格选择编辑注释。您似乎无法使用VBA开始编辑对象而无法完成它。

我知道这很愚蠢,但是能够激活一个单元格,然后就可以编辑评论,那就太棒了。有什么选择吗?

  

我尝试了以下内容:

SHEET1:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Selection.Count = 1 Then
        If Not Intersect(Target, Range("N19:N30")) Is Nothing Then
            Call Comment
        End If
    End If
End Sub

MODULE:

Sub Comment()
'Edit Comment upon cell selection
cmnt = ActiveCell.Comment.Text
Cell = ActiveCell.Address
    With Range(Cell)
       .Comment.Text Text:=cmnt
    End With
End Sub

但是,这只是重写注释而不会使对象可编辑。

1 个答案:

答案 0 :(得分:1)

我不认为你所要求的是完全可能的(VBA对象“评论”没有任何方法)。

但是,您可以使用InputBox很好地模仿此功能。例如,如果选择更改为具有注释的单元格,则会自动弹出一个输入框,其中现有注释已预先填充并准备进行编辑。如果选择更改为没有注释的单元格,则将忽略它。代码:

Sub Edit_Comment(Current_Cell As Range)
Dim New_Comment As String

    If Current_Cell.Comment Is Nothing Then Exit Sub

    New_Comment = InputBox("", , Current_Cell.Comment.Text)
    If StrPtr(New_Comment) <> 0 Then Current_Cell.Comment.Text Text:=New_Comment

End Sub

要调用此子代码,请将代码Call Comment替换为Call Edit_Comment(Target)

几点说明:

  • 我建议不要将您的子程序称为“注释”以避免 混淆与VBA对象“评论”;
  • 而不是使用“ActiveCell”, 将“Target”作为参数传递给子程序。

子工作方式: 它首先检查单元格是否有注释。如果没有,它会退出。 如果是,则打开一个输入框并使用现有注释预先填充它。 用户响应在“New_Comment”字符串中捕获,并覆盖旧注释。 唯一棘手的部分是当用户点击输入框中的“取消”按钮时处理情况。这是通过If StrPtr(New_Comment) <> 0测试解决的。

如果您需要输入框以弹出任何单元格而不管它们是否有注释,您可以修改上述代码:

Sub Edit_Comment(Current_Cell As Range)
Dim New_Comment As String

    If Current_Cell.Comment Is Nothing Then
        New_Comment = InputBox("")
        If StrPtr(New_Comment) <> 0 Then Current_Cell.AddComment Text:=New_Comment
    Else
        New_Comment = InputBox("", , Current_Cell.Comment.Text)
        If StrPtr(New_Comment) <> 0 Then Current_Cell.Comment.Text Text:=New_Comment
    End If

End Sub

首先测试是否存在通知;如果是的话,它会编辑它,否则会创建它。