检查命名范围是否等于另一个命名范围

Check if Named Range is equal to another Named Range

如果命名范围“InventoryList”等于传递到 Sub 的命名范围,我正在尝试调整 Excel 中的命名范围。我似乎无法获得正确的语法。 “IF”语句是我遇到错误的地方。希望有人能帮助我。

提前致谢。

    Sub Resize_Inventory_Range(InventoryList As Excel.Range)

        Dim xlApp As Excel.Application
        Dim WB As Excel.Workbook
        Dim WS As Excel.Worksheet
        Dim FullInventory As Excel.Range

        xlApp = GetObject(, Constants.ExcelApp)
        WB = xlApp.Workbooks("Product")
        WS = WB.Sheets("Inventory")
        FullInventory = WS.Range("Full_Inventory")

        If InventoryList.Name.Name = "Hardware_Inventory" Then
            FullInventory.Resize(FullInventory.Rows.Count + 1, 4).Name = FullInventory.Name.Name
        End If

    End Sub

您可以通过比较它们的地址来检查这两个范围是否相同。例如:

MsgBox InventoryList.Address = FullInventory.Address

什么 name.name return 取决于名称是在工作簿级别还是在工作表级别定义的。在工作表级别的情况下,名称将 return 例如“表 1!Hardware_Inventory”。

所以你的支票应该是:

If InventoryList.Name.Name like "*Hardware_Inventory" Then

(如果可能有一个名称“Old_Hardware_Inventory”,您将不得不构建一个更复杂的检查...)

并且为了安全起见 - 如果提供的范围没有名称 - 您应该改用此函数。如果没有名称,检查名称总是 return 出错。

Public Function tryGetName(c As Range) As String
'if range has no name this will catch the error
'an empty string is returned
On Error Resume Next
tryGetName = c.Name.Name
On Error GoTo 0
End Function

这是我认为 on error resume next 没问题的少数情况之一。

您的支票将如下所示:

If tryGetName(InventoryList) like "*Hardware_Inventory" Then