我有这段代码:
ActiveWorkbook.Names.Add Name:="BuBatch", RefersToR1C1:= _
"='Business Units'" & ActiveCell.Address
我正在使用“ActiveCell.Address,因为单元格发生了变化。但我得到一个错误,说公式中有错误。我不知道错误是什么。 感谢任何帮助。
答案 0 :(得分:1)
假设ActiveCell
位于工作表"业务单位" (并且您没有尝试在工作表上设置单元格的名称"业务单位"在某个位置作为其他工作表上的当前单元格),您可以将代码简化为:
ActiveCell.Name = "BuBatch"
修复现有公式需要删除R1C1
引用类型(如Scott Craner的评论中所述)以及插入!
以将工作表名称与地址分开,即
ActiveWorkbook.Names.Add Name:="BuBatch", RefersTo:= _
"='Business Units'!" & ActiveCell.Address
答案 1 :(得分:0)
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)
注意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