2015-05-23 5 views
1

Я работаю с большим файлом Excel, где я определил около 2000 имен для ячеек. Кроме того, excel содержит формулы, эти формулы уже введены со ссылками на ячейки (A23-B24). Я хочу изменить ссылки на ячейки по определенным именам (вместо A23-B24 с VARIABLE_100-VARIABLE_120).Как выбрать все имена в Excel с помощью VBA

Я знаю, что это возможно, выбрав «Применить имена», а затем выберите определенные имена из списка. Поскольку у меня есть около 2000 определенных имен, я хотел бы сразу выбрать все имена из меню, но я не могу найти вариант, поэтому я должен выбирать один за другим. Я смотрел, была ли опция включения множественного выбора в меню, но я не нашел такой опции. Работа для меня будет заключаться в создании макроса, который применяется к выбранному диапазону формул для выбранных имен. Что-то вроде этого:

Sub Macro1() 

' Macro1 Macro 

Selection.ApplyNames Names:=Array ("ATL_BV_XP", "ATL_BV_XP..EUN", "ATL_PK_XP", _ 
    "ATL_PK_XP..EUN", "CHN_PK_IM", "CHN_PK_IM..EUN", "CHN_PK_IM..SHREUN", _ 
    "E15_AG_AH", "E15_AG_EPA", "E15_AG_SFP", "E15_AG_SFP..CF" _ 
    , "E15_APF_FE"), IgnoreRelativeAbsolute:=True, UseRowColumnNames:=True, _ 
    OmitColumn:=True, OmitRow:=True, Order:=1, AppendLast:=False 
End Sub 

Моя проблема заключается в том, что, поскольку у меня есть большое количество определенных имен (уже писал, как в два раза, что около 2000), в котором перечислены все имена в макро-код становится очень сложным. Я думал, что, вероятно, обходным решением будет создание списка, включающего все определенные имена в коде. У кого-то есть идея, как это сделать? Я оглядываюсь, и некоторые коды предлагают цикл, а другие говорят, что можно извлечь список. Тем не менее я не смог найти способ сделать это.

+0

Вы искали «имена» объектной модели vba: https://msdn.microsoft.com/en-us/library/ff196278%28v=office.14%29.aspx –

+0

Спасибо за подсказку Christine Ross , Я не эксперт vba, в настоящее время я проверяю следующий веб-сайт https://msdn.microsoft.com/en-us/library/office/ff841280.aspx Возможно, используя последний пример, я смог бы: сначала создать список всех имен, затем примените этот список к выбранному диапазону формул, чтобы заменить ссылки на ячейки соответствующими именами. – user3279722

+0

Итак, можете ли вы более четко определить свою проблему? При чтении вопроса кажется, что вы хотите вставлять имена в формулы с помощью выпадающего списка и т. Д.Но при чтении комментариев кажется, что у вас уже есть имена в формулах, и вы хотите изменить их на фактические ссылки (например, в формуле у вас есть имя 'name1', и вы хотите заменить это на' Sheet1! A1')? – ZygD

ответ

0

Документация по msdn.microsoft.com говорит

имен: массив имен, которые будут применяться. Если этот аргумент опущен, все имена на листе применяются к диапазону.

см https://msdn.microsoft.com/en-us/library/office/ff196578(v=office.15).aspx

Вслед за что попробовать это:

Selection.ApplyNames _ 
    IgnoreRelativeAbsolute:=True, UseRowColumnNames:=True, _ 
    OmitColumn:=True, OmitRow:=True, Order:=1, AppendLast:=False 

Это должно работать в зависимости от Scope от Defined Names и их видимость. Попробуйте это и сообщите нам о результатах.

+0

спасибо за ответ, я попробовал кусок кода ниже, это не сработало. Excel запрашивает сообщение об ошибке, указывающее, что ссылки не найдены. Я пытался использовать вместо Cells.ApplyNames _ IgnoreRelativeAbsolute: = True, UseRowColumnNames: = True, _ OmitColumn: = True, OmitRow: = True, Order: = 1, AppendLast: = False сообщение об ошибке такое же , поэтому я думаю, что, не вводя значения для «Имена», он не использует определенные имена в рабочей книге или на листе. Моим другим вариантом было создать массив, а затем использовать этот массив как значение для имен. Тем не менее это не сработало. – user3279722

+0

Ну, это то, что утверждает Microsoft, я ожидал, что он будет работать, по крайней мере, для определенных имен с одинаковой областью действия и для тех, которые находятся на уровне рабочей книги, так что все остальные могут быть рассмотрены с помощью отдельной процедуры. Ваша цель заменить все ссылки «A1» в формулах вашей книги с соответствующими «Определенными именами» имеет для меня весь смысл, на самом деле я считаю, что это целая цель Определенных имен. Возможно ли, чтобы вы разместили свой файл где-то в Интернете, чтобы я мог получить подробный обзор «Масштаба» и величины связанных имен. Приветствия ... – EEM

0

Возможно, он уже доступен. Скажем, мы определили имена Стоимости, прибыли, Tax

При вводе формулы, имеет Tab Формулы открытых и вы всегда можете тянуть вниз эти имена:

enter image description here

Макрос будет приятным, но я не знаю, как вызвать макрос в середине редактирования.

+1

Спасибо за вход, проблема в том, что мой файл имеет более 2000 имен, и он уже введен как ссылки на ячейки, поэтому в идеале я хотел бы заменить эти ссылки именами за один шаг. – user3279722

+1

@ user3279722 Отправной точкой является выбор некоторой ячейки и запуск 'ActiveCell.ListNames' для создания таблицы имен и ссылок. Затем вы можете написать какой-то макрос find/replace, чтобы перебрать формулы и внести изменения. –

+0

Никогда не знал о '.ListNames'! Это спасло бы меня много времени во время моего последнего проекта :) – ZygD