VBA操作单元格批注

2023-08-05 21:16:48

单元格批注是对单元格的注释,帮助查看者了解更多的信息,而又不占用单元格空间,可隐藏可显示,较为方便。
Excel中,添加批注的方法有多种,其中一种是:选中需要添加批注的单元格,在菜单栏中选择“审阅”,然后选择“新建批注”即可。
如果需要查看批注,可以将鼠标移动到添加批注的单元格上方,会显示批注内容。
但是单元格批注如果处理不好,也可能会让界面显得非常混乱,例如:
批注过多,会影响表格的美观度和可读性。
批注内容不清晰或不准确,会误导查看者。
批注内容过长,会占用过多的空间,影响表格的布局。
计算机教程网提供一些处理单元格批注的代码供大家参考。

Sub 修改批注样式()
    Dim cmt As Comment
    For Each cmt In ActiveSheet.Comments
        With cmt.Shape.TextFrame.Characters.Font
            .Name = "Arial"
            .Size = 12
            .ColorIndex = 3
            .Bold = True
            .Italic = False
            .Underline = False
        End With
        With cmt.Shape.Fill
            .ForeColor.RGB = RGB(255, 255, 0)
            .Transparency = 0.5
        End With
    Next cmt
End Sub

Sub 修改批注框大小()
    Dim cmt As Comment
    For Each cmt In ActiveSheet.Comments
        With cmt.Shape
            .Width = 200
            .Height = 100
        End With
    Next cmt
End Sub


'C列单元格内容写到B列批注
Sub CopyToComment()
    Dim cmt As Comment
    Dim rng As Range
    For Each rng In Range("C1:C" & Cells(Rows.Count, "C").End(xlUp).Row)
        If rng.Value <> "" Then
            If rng.Offset(0, -1).Comment Is Nothing Then
                Set cmt = rng.Offset(0, -1).AddComment
            Else
                Set cmt = rng.Offset(0, -1).Comment
            End If
            cmt.Text Text:=CStr(rng.Value)
        End If
    Next rng
End Sub



'B列批注写入C列单元格内容
Sub CommentToCell()
    Dim cmt As Comment
    Dim rng As Range
    For Each rng In Range("B1:B" & Cells(Rows.Count, "B").End(xlUp).Row)
        If rng.Comment Is Nothing Then
            GoTo NextIteration
        End If
        rng.Offset(0, 1).Value = rng.Comment.Text
NextIteration:
    Next rng
End Sub

'移动批注位置的代码,但是只能移动显示的批注,隐藏的不行
Sub MoveComment()
    Dim cmt As Comment
    For Each cmt In ActiveSheet.Comments
        With cmt.Shape
            .Top = cmt.Parent.Top - 30
            .Left = cmt.Parent.Offset(0, 1).Left + 5
        End With
    Next cmt
End Sub


'这个代码会将所有单元格批注的框线设置为红色,线宽为2。
Sub AddCommentBorder()
    Dim cmt As Comment
    For Each cmt In ActiveSheet.Comments
        With cmt.Shape.Line
            .Visible = msoTrue
            .ForeColor.RGB = RGB(255, 0, 0) '框线颜色
            .Weight = 2 '框线的粗度
        End With
    Next cmt
End Sub


'设置批注格式
Sub SetCommentPlacement()
    '设置选中单元格的批注属性 位置随单元格而变化
    Dim cell As Range
    Dim yWidth As Long
    For Each cell In ActiveSheet.UsedRange
        If Not cell.Comment Is Nothing Then
            cell.Comment.Shape.TextFrame.AutoSize = False '大小固定
            cell.Comment.Shape.Placement = xlMove '位置随单元格变'
            
            '分别指定了缩放时是否保持纵横比和缩放时参考点的位置
            With cell.Comment.Shape
                .ScaleWidth 1, msoFalse, msoScaleFromTopLeft
                .ScaleHeight 1, msoFalse, msoScaleFromTopLeft
            End With
            
        End If
    Next cell
End Sub