使用其他命名范围的地址命名范围

时间:2015-09-01 12:25:09

标签: excel vba excel-vba

我有下面的代码,我想添加命名范围,其中地址与其他命名范围相关联,下面的代码不起作用,提前感谢所有想法。

ActiveWorkbook.Names.Add _
        Name:="somerange", _
        RefersTo:="=Sheet1!Cells(Range("namedrange1").row-5,Range("namedrange2").column)"

2 个答案:

答案 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 $中开始)。