在Excel中使用VBA命名单元格
我有这个代码:
ActiveWorkbook.Names.Add Name:="BuBatch", RefersToR1C1:= _ "='Business Units'" & ActiveCell.Address
我正在使用“ActiveCell.Address”,因为单元格发生了变化,但是我得到一个错误,说公式中有一个错误,我不知道错误是什么,欣赏任何帮助。
假设ActiveCell
在“业务单位”工作表上(并且您并未尝试为某个位置上的“业务单位”表单上的单元格设置名称作为其他表单上的当前单元格),则可以简化您的代码:
ActiveCell.Name = "BuBatch"
修复现有公式需要删除R1C1
引用types(如Scott Craner的评论中所述),并插入!
将表格名称与地址分开,即
ActiveWorkbook.Names.Add Name:="BuBatch", RefersTo:= _ "='Business Units'!" & ActiveCell.Address
Range.Address
是一个参数化的属性。 您可以使用对象浏览器来查看其定义(只需点击F2 ):
如你所见,定义如下:
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)
请注意ReferenceStyle
参数的xlA1
值; 另一种可能性是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