检查命名范围是否等于另一个命名范围
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
如果命名范围“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