2016-09-06 30 views
1

我一直在学习VBA一段时间,但有一个问题是我一直面对的,直到我知道后才知道。如何在Excel中使用VBA命名动态列

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

我知道如何命名一个固定的列。但那不是我想要的。我的问题

例子:

这个月我命名列DTotalAmount。 VBA代码可以是:

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

我将使用INDEX函数来参照该列中的其他细胞。

但是,下个月我会在栏位D之前添加一个新的专栏(比方说上个月的销售额)。因此,我想在下个月命名为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 

所以我会很感激,如果有人可以帮助我或指导我这个问题。

回答

0

“我”是一个变量,所以你不能使用加引号。引号,它只是“我”,也没有价值。尝试ActiveWorkbook.Names.Add Name:="TotalAmount", RefersToR1C1:="=Sheet1!C" & i
不知道这是否会解决您的问题虽然

+0

这正是我一直在寻找!像魅力一样工作!谢谢! :D – Alomical

0

你可以得到VBA找到小区为您提供:

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 

的代码搜索A1:Z1文本"Total Amount"并设置命名的区域到该小区

+0

嘿! 谢谢你的帮助! 这会设置当前列的名称吗?因为它们可能不是表格中的“TotalAmount”文本。相反,我希望当前列的名称设置为“TotalAmount” 我累了脚本,它给我“运行时错误”1004“应用程序定义或对象定义的错误”:S – Alomical

+0

试试这个'ThisWorkbook.Names。添加名称:=“TotalAmount”,RefersToR1C1:= rng.Address'。这应该可以解决你的错误。说,我不知道我明白你想要做什么。所以你想要将当前列的名称设置为“TotalAmount”?如果是这样,你为什么要寻找具有“TotalAmount”init的单元? – Zac

+0

你好! 是的,我想将当前列命名为“TotalAmount”。我只是试图向CallumDA33解释我的观点。因为我认为他误解了我的观点。 所以我只是想将当前列命名为“TotalAmount”。挑战在于,本月我想命名为“TotalAmount”的列是D列。但下个月,它将成为E列。 现在我可以通过在标题行中搜索文本来识别每个月的右列。选中所需列中的任何单元格后,我想将该列命名为“TotalAmount”。 – Alomical

相关问题