2016-09-06 6 views
1

Я некоторое время изучаю VBA, но есть одна проблема, с которой я столкнулся, что я не мог понять ее до тех пор, пока не узнаю.Как назвать динамический столбец в excel с помощью VBA

Я хочу, чтобы иметь возможность называть столбец с помощью VBA, поэтому я могу использовать его позже как ссылочный столбец (используя функцию INDEX) в других ячейках/столбцах.

Я знаю, как назвать столбец, который исправлен. Но это не то, что я ищу.

Пример моего вопроса:

В этом месяце я именование столбца D в TotalAmount. Код VBA может быть:

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

Я буду обращаться к этому столбцу в других ячейках с помощью функции INDEX.

Однако в следующем месяце я буду добавлять новый столбец (скажем, продажи в прошлом месяце) непосредственно перед колонкой D. Итак, новый столбец, который я хочу назвать TotalAmount следующего месяца, будет столбец E, а не D.

Я знаю, что имя столбца не должно меняться при добавлении нового столбца, а столбец 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? – Zac

+0

Привет! Да, я хочу, чтобы текущий столбец назывался «TotalAmount». Я просто пытался объяснить CallumDA33 моей точке. Потому что я думаю, что он неправильно понял мою точку зрения. Так что я просто хотел назвать текущую колонку «TotalAmount».Проблема заключалась в том, что в этом месяце столбец, который я хочу назвать «TotalAmount», - это столбец D. Но в следующем месяце это будет столбец E. Теперь я могу определить каждый месяц правильный столбец, выполнив поиск текста в строке заголовка. Когда какая-либо ячейка в выбранном столбце выбрана, я хочу называть этот столбец «TotalAmount». – Alomical