我有下面的代码,我想添加命名范围,其中地址与其他命名范围相关联,下面的代码不起作用,提前感谢所有想法。
ActiveWorkbook.Names.Add _
Name:="somerange", _
RefersTo:="=Sheet1!Cells(Range("namedrange1").row-5,Range("namedrange2").column)"
答案 0 :(得分:2)
将命名范围 namedrange1 定义为RefersTo:=Sheet2!$B$7
,其工作簿范围和命名范围 namedrange2 定义为RefersTo:=Sheet3!$D$10
,其中包含工作簿范围,定义一个名为 somerange 的新命名范围,其中RefersTo:=Sheet1!$D$2
包含工作簿范围。
With ActiveWorkbook
With .Worksheets("Sheet1")
With .Cells(Range("namedrange1").Row - 5, Range("namedrange2").Column)
.Name = "somerange"
End With
End With
End With
答案 1 :(得分:1)
提供namedrange1是一个已定义的命名范围,您只需将其编写为普通公式:
ActiveWorkbook.Names.Add "somerange", "=OFFSET(Sheet1!NamedRange1,-5,0,1)"
在您的代码中,您可以引用两个单独的工作表 -
Sheet1.Cells和ActiveSheet.Range - 如果您没有明确引用工作表名称,它将使用活动工作表。
你有效地写作:"=Sheet1!Cells(ActiveSheet.Range("namedrange1").row-5,ActiveSheet.Range("namedrange2").column)"
编辑: 您的代码似乎也是公式和VBA代码的组合 - Sheet1!用于引用公式中的另一个工作表,Cells是一个VBA类型引用.Row和.Column
编辑2:
你也可以使用:
ActiveWorkbook.Names.Add "SomeOtherRange", "=" & Sheet1.Range("NamedRange1").Offset(-5).Resize(1).Address
但是这会对地址进行硬编码 - 当你检查你的命名范围时,它会看起来像:=Sheet1!$I$5
(如果你的命名范围在单元格$ 10 $中开始)。