VBA代码:获取并列出工作表中的所有批注

2022-11-16 12:54:27 浏览数 (1)

标签:VBA

在使用Excel工作表时,我们往往会对某些单元格插入批注来解释其中的数据,用户也可能会插入批注来写下他们的建议。如果你的工作表中有很多批注,而你不想逐个点开查看,那么可以将所有批注集中显示在工作表中。

本文给出的代码将获取工作表中所有的批注,并将它们放置在一个单独的工作表中,清楚地显示批注所在的单元格、批注人和批注内容。

完整的代码如下:

代码语言:javascript复制
Sub ExtractComments()
    Dim ExComment As Comment
    Dim i As Integer
    Dim ws As Worksheet
    Dim CS As Worksheet
    Set CS = ActiveSheet
    If ActiveSheet.Comments.Count = 0 Then Exit Sub
    For Each ws In Worksheets
        If ws.Name = "批注列表" Then i = 1
    Next ws
    If i = 0 Then
        Set ws = Worksheets.Add(After:=ActiveSheet)
        ws.Name = "批注列表"
    Else
        Set ws = Worksheets("批注列表")
    End If
    For Each ExComment In CS.Comments
        ws.Range("A1").Value = "批注所在单元格"
        ws.Range("B1").Value = "批注人"
        ws.Range("C1").Value = "批注内容"
        With ws.Range("A1:C1")
            .Font.Bold = True
            .Interior.Color = RGB(189, 215, 238)
             .Columns.ColumnWidth = 20
        End With
        If ws.Range("A2") = "" Then
            ws.Range("A2").Value = ExComment.Parent.Address
            ws.Range("B2").Value = Left(ExComment.Text, InStr(1, ExComment.Text, ":") - 1)
            ws.Range("C2").Value = Right(ExComment.Text, Len(ExComment.Text) - InStr(1, ExComment.Text, ":"))
        Else
            ws.Range("A1").End(xlDown).Offset(1, 0) = ExComment.Parent.Address
            ws.Range("B1").End(xlDown).Offset(1, 0) = Left(ExComment.Text, InStr(1, ExComment.Text, ":") - 1)
            ws.Range("C1").End(xlDown).Offset(1, 0) = Right(ExComment.Text, Len(ExComment.Text) - InStr(1, ExComment.Text, ":"))
        End If
    Next ExComment
End Sub

代码首先检查当前工作表中是否存在批注,如果没有批注,则退出程序。如果有批注,则创建一个用于放置批注的名为“批注列表”的工作表,其中,在列A放置批注所在的单元格地址,列B放置写批注的人名,列C中是批注的内容。

注:本文代码整理自trumpexcel.com,供有兴趣的朋友学习参考。

0 人点赞