如何使用VBA在Excel中命名dynamic列

我一直在学VBA一段时间,但是有一个问题是我一直面对的,直到知道的时候我才知道。

我希望能够使用VBA命名一个列,所以我可以稍后将它用作其他单元格/列中的参考列(使用INDEX函数)。

我知道如何命名一个固定的列。 但是这不是我正在寻找的。

我的问题的例子:

本月我将D列命名为TotalAmount 。 VBA代码可以是:

 ActiveWorkbook.Names.Add Name:="TotalAmount", RefersToR1C1:="=Sheet1!C4" 

我将使用INDEX函数引用其他单元格中的该列。

不过,下个月我会在D列之前添加一个新的专栏(比方说上个月的销售额)。 因此,下一个月我TotalAmount名为TotalAmount的新列将成为E列,而不是D列。

我知道添加一个新列时Column命名不应该改变,列E将自动成为TotalAmount列。 然而,我不能依靠它,因为excel工作表是由不同的人访问,每个人都在做他自己的计算。

所以我也试过这个(我相信这是愚蠢的,但嘿,我仍然是一个小白),但它没有工作:(

 Sub Macro4() Range("D1").Select '(I can select the desired cell each month using the search function) Dim i As Integer i = ActiveCell.Column ActiveWorkbook.Names.Add Name:="TotalAmount", RefersToR1C1:="=Sheet1!Ci" End sub 

所以,如果有人能够帮助我或引导我在这个问题上,我将非常感激。

'我'是一个variables,所以你不能用引号。 在引号中,它只是“我”,没有任何价值。 尝试ActiveWorkbook.Names.Add Name:="TotalAmount", RefersToR1C1:="=Sheet1!C" & i
不知道这是否会解决您的问题

你可以得到VBA为你find单元格:

 Sub SetNamedRange() Dim rng As Range Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1:Z1").Find("TotalAmount") ThisWorkbook.Names.Add Name:="TotalAmount", RefersToR1C1:=rng End Sub 

代码searchA1:Z1作为文本"Total Amount" ,并将命名范围设置为该单元格