在excel中使用VBA命名单元格

时间:2017-04-25 19:15:48

标签: excel vba

我有这段代码:

ActiveWorkbook.Names.Add Name:="BuBatch", RefersToR1C1:= _
    "='Business Units'" & ActiveCell.Address

我正在使用“ActiveCell.Address,因为单元格发生了变化。但我得到一个错误,说公式中有错误。我不知道错误是什么。 感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

假设ActiveCell位于工作表"业务单位" (并且您没有尝试在工作表上设置单元格的名称"业务单位"在某个位置作为其他工作表上的当前单元格),您可以将代码简化为:

ActiveCell.Name = "BuBatch"

修复现有公式需要删除R1C1引用类型(如Scott Craner的评论中所述)以及插入!以将工作表名称与地址分开,即

ActiveWorkbook.Names.Add Name:="BuBatch", RefersTo:= _
    "='Business Units'!" & ActiveCell.Address

答案 1 :(得分:0)

Range.Address是参数化属性。您可以使用对象浏览器(只需点击 F2 )查看其定义:

VBE Object Browser showing Range.Address definition

如您所见,定义如下:

Property Address([RowAbsolute], [ColumnAbsolute], [ReferenceStyle As XlReferenceStyle = xlA1], [External], [RelativeTo]) As String

方括号表示可选参数,执行此操作时:

foo = ActiveCell.Address

你实际上是在做这样的事情:

foo = ActiveCell.Address( _
        RowAbsolute:=True, _
        ColumnAbsolute:=True, _
        ReferenceStyle:=xlA1, _
        External:=False, _
        RelativeTo:=Nothing)

注意xlA1参数的ReferenceStyle值;另一种可能性是xlR1C1

如果您要分配RefersToR1C1,则需要提供R1C1地址,该地址涉及为ReferenceStyle参数提供非默认值:

ActiveWorkbook.Names.Add _
    Name:="BuBatch", _
    RefersToR1C1:="='Business Units'!" & ActiveCell.Address(ReferenceStyle:=XlR1C1)

或者,使用默认寻址样式,并改为分配给RefersTo

ActiveWorkbook.Names.Add _
    Name:="BuBatch", _
    RefersTo:="='Business Units'!" & ActiveCell.Address

我在这里质疑ActiveCell的使用:它暗示在你的代码中的其他地方,你正在激活那个特定的单元格。别。改为使用对象模型:

Dim targetBook As Workbook
Set targetBook = Application.Workbooks.Open(path)

Dim target As Range
Set target = targetBook.Worksheets("Sheet1").Range("A1") 'whatever the actual target cell is

targetBook.Names.Add Name:="BuBatch", RefersTo:="='Business Units'!" & target.Address