标签: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,供有兴趣的朋友学习参考。