微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何比较两个工作簿中所有定义的名称?

如何解决如何比较两个工作簿中所有定义的名称?

我需要打开两个定义相同但范围不同的工作簿,并在其中一个工作簿中突出显示每个命名范围的内容差异。

我使用附加的代码将一本工作簿上的硬编码范围与两张工作表进行比较。

Private Sub HighlightDifferences()
    Dim setone As Range
    Dim setTwo As Range
    Set setone = Sheets("Sheet1").Range("Ongoing_Activities")
    Set setTwo = Sheets("Sheet1 (2)").Range("Ongoing_Activities")

    'REMOVE THE COLOR FILL
    setone.Interior.ColorIndex = xlNone

    For Each cellitem In setone
        If Not StrComp(cellitem,cellitem2,vbBinaryCompare) = 0 Then
            cellitem.Interior.ColorIndex = 6
        End If

        For Each cellitem2 In setTwo
            If StrComp(cellitem,vbBinaryCompare) = 0 Then
                cellitem.Interior.ColorIndex = 0
            End If
        Next cellitem2
    Next cellitem

End Sub

解决方法

请尝试下一个代码:

Sub compareNamesTwoWorkbooks()
    Dim wb1 As Workbook,wb2 As Workbook,N1 As Name,N2 As Name,i As Long,j As Long
    Dim rngN1 As Range,rngN2 As Range,boolFound As Boolean
    
    Set wb1 = Workbooks("first workbook.xlsx")
    Set wb2 = Workbooks("second workbook.xlsx")
    
    For Each N1 In wb1.Names
        For Each N2 In wb2.Names
            If N1.RefersTo = N2.RefersTo Then
                Set rngN1 = Application.Evaluate("'[" & wb1.Name & "]" & _
                                Replace(Replace(N1.RefersTo,"=",""),"!","'!"))
                Set rngN2 = Application.Evaluate("'[" & wb2.Name & "]" & _
                                Replace(Replace(N2.RefersTo,"'!"))
                rngN1.Interior.ColorIndex = xlNone: 'rngN1.Parent.Activate: Stop

                For i = 1 To rngN1.rows.count
                    For j = 1 To rngN1.Columns.count
                        If Not StrComp(rngN1.cells(i,j).Value,_
                             rngN2.cells(i,vbBinaryCompare) = 0 Then
                             rngN1.cells(i,j).Interior.ColorIndex = 6
                        End If
                    Next j
                Next i
                boolFound = True: Exit For
            End If
        Next N2
        If Not boolFound Then Debug.Print "Names """ & N1.Name & _
                    """ could not be found in workbook """ & wb2.Name
        boolFound = False
    Next N1
End Sub

注意使用您的真实姓名来定义 wb1 和 wb2` 工作簿。当然,它们必须是开放的。如果需要,它们也可以由程序打开。 测试后,一些反馈将不胜感激...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。