我觉得这是不可能实现的。我想自动右键单击一个单元格,然后单击单元格选择编辑注释。您似乎无法使用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
但是,这只是重写注释而不会使对象可编辑。
答案 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)
几点说明:
子工作方式:
它首先检查单元格是否有注释。如果没有,它会退出。
如果是,则打开一个输入框并使用现有注释预先填充它。
用户响应在“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
首先测试是否存在通知;如果是的话,它会编辑它,否则会创建它。