VBA中定义区域名称遇异常:两种方法均生成M27而非目标名称
问题:给指定单元格区域定义名称,结果仅关联左上角单元格
尝试为单元格区域M27:R40定义名称LEGEND,但两种VBA写法最终都只让名称指向区域左上角的M27单元格,而非整个区域。
尝试过的代码
第一种写法
With Range("M27:R40") .Merge .BorderAround ColorIndex:=1, Weight:=xlMedium .Value = UCase("legend") .HorizontalAlignment = xlLeft .VerticalAlignment = xlTop .Name = "LEGEND" End With
第二种写法
Range("M27:R40").Name = "LEGEND"
解决方案
问题出在直接使用Range.Name属性的方式:当单元格区域被合并后,Range对象会自动指向合并区域的左上角单元格,导致名称仅关联该单个单元格。正确的做法是使用Names.Add方法明确创建命名区域:
方案1:无需合并区域时
' 直接创建指向M27:R40的命名区域 ThisWorkbook.Names.Add Name:="LEGEND", RefersTo:=Range("M27:R40")
方案2:需要合并区域时
先完成合并等格式设置,再单独添加命名区域:
With Range("M27:R40") .Merge .BorderAround ColorIndex:=1, Weight:=xlMedium .Value = UCase("legend") .HorizontalAlignment = xlLeft .VerticalAlignment = xlTop End With ' 为原区域创建命名,不受合并影响 ThisWorkbook.Names.Add Name:="LEGEND", RefersTo:=Range("M27:R40")
说明
Names.Add方法可以直接指定名称对应的单元格区域,不会因合并操作改变指向,能确保名称关联你需要的整个区域。
内容的提问来源于stack exchange,提问作者Geographos
相关产品推荐
相关产品推荐

