在指定单元格中显示/修改其它单元格的批注

测试环境:Excel 2010

语言:VBA(excel宏)


先上图,效果如下:

在指定单元格中显示/修改其它单元格的批注_第1张图片

实现功能:

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.csdn.net/detail/shutdown_r_now/7463903

你可能感兴趣的:(Excel,宏,VBA)