测试环境:Excel 2010
语言:VBA(excel宏)
先上图,效果如下:
实现功能:
1、点击有批注的单元格,其批注会显示在右边的区域中。修改右边区域里面的文字,相应表格的批注也会被修改。
2、如果把右边区域里的文字删除,相应表格的批注也会被删除。
3、点击没有批注的单元格,在右边的区域里输入文字,会为该单元格创建批注,内容即输入的文字。
更多内容及限制等等看代码吧,注释都很清楚了:
'Date: 2014-06-07
'version: 0.1
'
Public flag As Integer '用于标志是否应该修改目标单元格
Public x, y As Integer '用于记录需要修改的单元格坐标
Private Sub Worksheet_Change(ByVal Target As Range) '修改单元格时触发
Dim comment_text As String
If Target.Column = 11 And Target.Row = 5 And flag = 1 Then '如果修改的是批注显示区域(即K5)且标志为1
comment_text = Range("K5") '保存批注显示区域K5的内容
With Cells(x, y)
If .Comment Is Nothing Then '如果之前选中的单元格没有批注
.AddComment '新增批注(内容暂时为空)
End If
If comment_text = "" Then '如果要批注显示区域里面的内容被清空
Cells(x, y).ClearComments '则删除之前选中单元格的批注
Else
.Comment.Text Text:=comment_text '否则就修改目标区域单元格的批注为显示的内容
End If
End With
flag = 0 '重置标志位
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '选中的单元格发生变化时触发
If Target.Column >= 1 And Target.Column <= 7 And Target.Row >= 2 And Target.Row <= 6 And Cells(Target.Row, Target.Column).Value <> "" Then
'当前选择单元格在目标区域内,且单元格非空
y = Target.Column '记录单元格坐标
x = Target.Row
flag = 0 '为了避免触发Worksheet_Change,在操作K5之前,要先置标志位为0。
If Selection.NoteText <> "" Then '如果选中单元格有批注
Range("K5") = Selection.Comment.Text '在批注显示区显示批注内容
Else '如果选中单元格没有批注,则批注显示区不显示内容
Range("K5") = ""
End If
flag = 1 '在这个if条件下,可以置flag为1,允许修改选中单元格。
ElseIf Target.Column = 11 And Target.Row = 5 Then '如果选中了批注显示区,则不应该影响flag的值,因此此处空语句。
Else '其余情况,应该置flag为0,不允许修改选中单元格
flag = 0
Range("K5") = ""
End If
End Sub
测试用的excel文件(含代码)的下载地址是: http://download.youkuaiyun.com/detail/shutdown_r_now/7463903