在带有合并单元格的vba中遍历excel工作簿上的注释

在带有合并单元格的vba中遍历excel工作簿上的注释,excel,vba,Excel,Vba,我有一个工作簿,有多张有注释的工作表。我必须循环浏览每一张表格,并收集评论。我已经实现了以下逻辑 对于ActiveWorkbook.工作表中的每个Ip_工作表 设置Rng=Ip_Sheet.Cells.SpecialCellsxlCellTypeComments 如果Rng不算什么,那么 MsgBox在工作表中没有注释 其他的 对于Rng中的每个单元 Comment\u Author\u name和Comment=Splitcell.Comment.Text,: AuthName=Comment

我有一个工作簿,有多张有注释的工作表。我必须循环浏览每一张表格,并收集评论。我已经实现了以下逻辑

对于ActiveWorkbook.工作表中的每个Ip_工作表 设置Rng=Ip_Sheet.Cells.SpecialCellsxlCellTypeComments 如果Rng不算什么,那么 MsgBox在工作表中没有注释 其他的 对于Rng中的每个单元 Comment\u Author\u name和Comment=Splitcell.Comment.Text,: AuthName=Comment\u Author\u name和comment0 AuthComments=注释\作者\姓名和注释1 如果工作表中没有合并的单元格,则上述逻辑工作正常。但是,如果存在合并的单元格/行,则Rng中每个单元格的循环将针对合并单元格范围中的每个单元格运行。例如,如果合并列A:D,则循环将针对每个单元格A、B、C和D运行,并且我在AuthName和AuthComments变量中获得相同的值

我的问题是,如果找到合并的单元格,如何使循环跳到工作表上的下一个注释

编辑: 我还尝试通过以下方法循环检查工作表中的所有注释,但是,该方法没有成功-Rng.Comment对象始终为空

        For Each cmnt_obj In Rng.Comment
            cmt_txt = cmnt_obj.Text
        Next cmnt_obj
由于SpecialCellsxlCellTypeComments返回合并区域的所有单元格,因此您需要检测某个单元格何时是命名区域的一部分,并且只处理其中一个单元格。可以使用Range.MergeCells检测合并单元格,使用Range.MergeArea返回合并范围本身。然后,仅当单元格是合并区域的左上角单元格时才报告注释

大概是这样的:

Sub Demo()
    Dim rng As Range
    Dim cl As Range
    Dim wb As Workbook
    Dim ws As Worksheet

    Set wb = ActiveWorkbook
    For Each ws In wb.Worksheets
        Set rng = ws.Cells.SpecialCells(xlCellTypeComments)
        If Not rng Is Nothing Then
            For Each cl In rng.Cells
                If cl.MergeCells Then
                    If cl.Address = cl.MergeArea.Cells(1).Address Then
                        ReportComment cl
                    End If
                Else
                    ReportComment cl
                End If
            Next
        End If
    Next
End Sub

Sub ReportComment(cl As Range)
    Dim Comment_Author_NameAndComment() As String
    Dim AuthName As String
    Dim AuthComments As String

    Comment_Author_NameAndComment = Split(cl.Comment.Text, ":")
    AuthName = Comment_Author_NameAndComment(0)
    AuthComments = Comment_Author_NameAndComment(1)
    Debug.Print AuthName, AuthComments
    '...
End Sub

可能是@brax的重复,这不是重复。虽然它在检测合并范围方面有很好的信息,但它没有说明如何解决这个问题problem@Deepak如果注释不是合并范围的一部分,或者是合并范围的左上角单元格,即cell.address=cell.mergerange.cells1,则可以报告注释。address@chrisneilsen对不起,我不明白你的上述评论是什么意思。@braX这不是重复的。我知道如何检测单元格是合并单元格的一部分还是未使用单元格。MergeCells=True。但是,我想做的是,如果我知道这个单元格有注释并且是合并单元格的一部分,那么我想迭代到下一个有注释的单元格。