2016-09-06 31 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

相關問題