在使用vba为单元格范围添加名称时,请避免包含图纸名称

我正在使用Excel 2011 for Mac(版本14.3.1)中的一些数据,我需要绘制图表并稍后添加更多数据。 要做到这一点,我使用范围名称,因为它在这里解释。 基本上,使用公式=OFFSET($A$2,0,0,COUNTA($A:$A)-1) (用西class牙语: =DESREF($A$2,0,0,CONTARA($A:$A)-1) )。

我有很多专栏,所以我写了这个vba来为我做:

 Sub Botón6_AlHacerClic() For i = 1 To Columns.Count Names.Add Name:=ActiveSheet.Name & Range(Cells(1, i).Address).Value, RefersTo:="=DESREF(" & Cells(2, i).Address & ",0,0,CONTARA(" & Replace(Cells(1, i).Address, "$1", "") & ":" & Replace(Cells(1, i).Address, "$1", "") & ")-1)" Next i End Sub 

哪里:

  1. Cells(2, i).Address是第二行的单元格ID(例如: $ A $ 2
  2. Replace(Cells(1, i).Address, "$1", "")是行字母(例如: $ A

我遇到的问题是,当手动input名称时,它用=DESREF(Sheet1!$A$2,0,0,CONTARA(Sheet1!$A:$A)-1) =DESREF($A$2,0,0,CONTARA($A:$A)-1)replace公式=DESREF($A$2,0,0,CONTARA($A:$A)-1) =DESREF(Sheet1!$A$2,0,0,CONTARA(Sheet1!$A:$A)-1)这很好,很好。 但是,当我这样做的VBA,它取代=Sheet1!DESREF(Sheet1!$A$2,0,0,CONTARA(Sheet1!$A:$A)-1)不起作用。

我尝试使用“ 添加”手册的不同选项,甚至在创build名称后尝试运行此代码以消除Sheet1! 在开始时,但最后他们保持Sheet1!

 Sub Botón7_AlHacerClic() Set nms = ActiveWorkbook.Names For i = 1 To nms.Count nms(i).RefersTo = Replace(nms(i).RefersTo, ActiveSheet.Name & "!DESREF", "DESREF") Next i End Sub 

我尝试的另一件事是取代Sheet1!DESREF的东西是不是一个函数:

 Sub Botón7_AlHacerClic() Set nms = ActiveWorkbook.Names For i = 1 To nms.Count nms(i).RefersTo = Replace(nms(i).RefersTo, ActiveSheet.Name & "!DESREF", "DESREFF") Next i End Sub 

在这种情况下,它给了我: =DESREFF($A$2,0,0,CONTARA($A:$A)-1)但是我还没有find一种方法来使用DESREF而不添加Sheet1!

我怎样才能防止Sheet1! 从出现在开始?
谢谢

我已经尝试过不同版本的Excel,它似乎是Excel 2011 for Mac(版本14.3.1)中的一个错误。

我在以下版本中试过,并没有添加Sheet1! 在开始时:

  1. Excel for Mac 14.3.9
  2. Excel for Windows 16.0.6001.1054

现在这两个版本的问题如下:
我有一个列以下单元格:

 C1-> data C2-> 400 C3-> 100 C4-> 100 

C5空了之后。 我运行脚本来创build名称:

 Sub Botón6_AlHacerClic() For i = 1 To Columns.Count Names.Add Name:=ActiveSheet.Name & Range(Cells(1, i).Address).Value, RefersTo:="=DESREF(" & Cells(2, i).Address & ",0,0,CONTARA(" & Replace(Cells(1, i).Address, "$1", "") & ":" & Replace(Cells(1, i).Address, "$1", "") & ")-1)" Next i End Sub 

它创build了名为Sheet1data的引用: =DESREF(Sheet1!$C$2;0;0;CONTARA(Sheet1!$C:$C)-1)这是正确的。 但是,如果我去任何单元格并插入公式=SUM(Sheet1data)它解决公式错误#Name? ,即使解释公式似乎指向正确的单元格。

更奇怪的是,如果创build后我去编辑名称,只需按下回车 ,公式自动工作,并呈现600 。 如果再次进入名称编辑器,则显示=DESREF(Sheet1!$C$2;0;0;CONTARA(Sheet1!$C:$C)-1) ,与以前相同。

最后, 我发现这个网站的例子有一个解释类似于我想要做的事情:

 Sub DynamicNames() Dim LastCol As Long, _ LabelRow As Long, _ Col As Long Dim sName As String Dim c As Range Dim Sht As String 'assign row and column parameters '**adjust for the row containing your headings LabelRow = 1 LastCol = Range("IV1").End(xlToLeft).Column 'grab sheet name Sht = "'" & ActiveSheet.Name & "'" For Each c In Range(Cells(LabelRow, 1), Cells(LabelRow, LastCol)) Col = c.Column sName = c.Value If Len(sName) > 1 Then 'replace spaces with underscores sName = Replace(sName, " ", "_", 1) 'create the name ActiveWorkbook.Names.Add Name:=sName, RefersToR1C1:= _ "=OFFSET(" & Sht & "!R2C" & Col & ",0,0,COUNTA(" & Sht & "!C" & Col & ")-1,1)" End If Next c End Sub 

主要区别在于他们使用RefersToR1C1而不是RefersTo ,所以我改变了它,但仍然没有工作。 最后,我将公式更改为英文,即使我必须用西class牙语手写它们,并做了最后的把戏: Names.Add Name:=ActiveSheet.Name & Range(Cells(1, i).Address).Value, RefersToR1C1:="=OFFSET(" & ActiveSheet.Name & "!R2C" & Cells(2, i).Column & ",0,0,COUNTA(" & ActiveSheet.Name & "!C" & Cells(2, i).Column & ")-1)"

所以,问题出在哪里:

  1. Excel 2011 for Mac(版本14.3.1)似乎有一个错误。
  2. 使用RefersToR1C1而不是RefersTo可以更容易地使用vba公式,也许它有帮助。
  3. 即使在我所有的Excel中,我都使用西class牙语公式,但是vba中的公式必须是英文的。 (我尝试了参数_ RefersToR1C1Local_,但它给了我一个错误)。

最后,工作的代码:

 Sub Botón6_AlHacerClic() For i = 1 To Columns.Count Names.Add Name:=ActiveSheet.Name & Range(Cells(1, i).Address).Value, RefersToR1C1:="=OFFSET(" & ActiveSheet.Name & "!R2C" & Cells(2, i).Column & ",0,0,COUNTA(" & ActiveSheet.Name & "!C" & Cells(2, i).Column & ")-1)" Next i End Sub 

我希望它能帮助别人:)