在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 ):

显示Range.Address定义的VBE对象浏览器

如你所见,定义如下:

 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