Excel VBA如何判断传入Named Range与指定命名区域相等并调整大小
Excel VBA 命名区域判断+Resize报错修复方案
核心错误原因
- VBA 中对
Range、Workbook、Application这类对象变量赋值时,必须加Set关键字,你原有代码中所有对象赋值都缺失Set,是触发报错的核心原因 - 直接调用
InventoryList.Name.Name存在风险:如果传入的Range本身没有绑定命名区域,会直接触发运行时错误,需要先加一层非空判断 - Resize后重命名的逻辑可兼容边界异常
修正后可运行代码
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 Dim targetRangeName As String ' 先判断传入Range是否有命名,避免报错 On Error Resume Next targetRangeName = InventoryList.Name.Name On Error GoTo 0 ' 匹配到目标命名再执行后续逻辑,如果你要判断的是名称为InventoryList,替换下面引号内的内容即可 If targetRangeName = "Hardware_Inventory" Then ' 对象赋值必须加Set关键字 Set xlApp = GetObject(, Constants.ExcelApp) Set WB = xlApp.Workbooks("Product") Set WS = WB.Sheets("Inventory") Set FullInventory = WS.Range("Full_Inventory") ' Resize后重写命名区域的引用范围 FullInventory.Resize(FullInventory.Rows.Count + 1, 4).Name = "Full_Inventory" End If End Sub
补充说明
- 代码加入了容错处理,就算传入无命名的普通Range也不会崩溃
- 最后直接写死命名字符串
"Full_Inventory"比调用FullInventory.Name.Name更稳定,避免原有命名异常导致赋值失败
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

