【问题标题】:Check if Named Range is equal to another Named Range检查命名范围是否等于另一个命名范围
【发布时间】:2021-10-22 02:49:53
【问题描述】:

如果命名范围“InventoryList”等于传递给子的命名范围,我正在尝试在 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

【问题讨论】:

  • InventoryList.Name.Name 的实际值是多少?记住与“=”的字符串比较区分大小写

标签: excel vb.net if-statement named-ranges


【解决方案1】:

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

MsgBox InventoryList.Address = FullInventory.Address

【讨论】:

    【解决方案2】:

    name.name 返回的内容取决于名称是在工作簿级别还是在工作表级别定义的。如果工作表级别名称将返回,例如"Table1!Hardware_Inventory"。

    所以你的支票应该是:

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

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

    为了安全起见——如果提供的范围没有名称——你应该改用这个函数。如果没有名称,检查名称总是会返回错误。

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多