VBA工作表子在另一个工作表中创建命名范围

时间:2017-04-04 23:02:15

标签: excel vba excel-vba

我有一个私有子,需要在另一个工作表中创建命名范围。它需要保留工作表函数,因为它是Worksheet_Change子。我已经成功地设置了一个范围变量,它等于另一张纸上的范围:

Set rng2 = Sheets("Lists").Range(Sheets("Lists").Cells(2, Col), Sheets("Lists").Cells(Unique, Col))

但是,当我将rng2放入代码的其他部分时,它只是引用活动工作表中的正确范围。

以下是我的尝试:

ActiveWorkbook.Names.Add Name:="Level" & Col, RefersTo:= _
    "= " & Sheets("Lists").Range(Sheets("Lists").Cells(2, Col), Sheets("Lists").Cells(Unique, Col)).Address & ""

和:

ActiveWorkbook.Names.Add Name:="Level" & Col, RefersTo:= _
    "=" & rng2.Address & ""

底部函数在作为整体存储在工作簿内的模块中时起作用,但同样在工作表子中不起作用。 我也尝试了Sheets("Lists").rng2.Address

2 个答案:

答案 0 :(得分:3)

您的RefersTo字符串必须类似于"=Lists!A1"。所以它缺少的是对列表工作表的引用。

尝试这样的事情:

Dim wsLists As Worksheet
Set wsLists = ThisWorkbook.Worksheets("Lists")

With wsLists
    Set rng2 = .Range(.Cells(2, Col), .Cells(Unique, Col))
    ThisWorkbook.Names.Add Name:="Level" & Col, RefersTo:="=" & rng2.Address(external:=True)
End With

答案 1 :(得分:3)

要让地址包含工作表的名称,您必须设置external参数:

rng2.address(external:=True)