Применить имена в Excel прослушивается?

1467
ZygD

Я вижу, что у людей была эта проблема 10 лет назад, и она до сих пор не устранена. Или, может быть, я просто не знаю, как использовать эту функцию.
enter image description here

В моем листе у меня есть эти именованные диапазоны:
A1 - «name1»
B1 - «name2»
C1 - «name3»

В некоторых других 3 ячейках у меня есть эти формулы:

=A1 =A1+B1 =COUNT(A1:C1) 

После запуска Apply Names...я ожидаю получить это:

=name1 =name1+name2 =COUNT(name1:name3) 

Я никогда не получу это независимо от того, какие варианты я выберу. Более того, обычно мои формулы полностью разрушаются ...

=name1 =name1 =name1 

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

Я использую Excel 2013, 32-разрядная версия (MS Office Professional Plus). ОС - Windows 7 Enterprise, 64-битная.

4
У меня та же проблема, что и у вас. Ты не одинок! Andi Mohr 8 лет назад 1
Какие версии Excel вы используете? OP и @AndiMohr Raystafarian 8 лет назад 0
@Raystafarian Я нахожусь в Excel 2013 (Office Pro Plus 2013) на 64-битной Windows 7 Pro. Andi Mohr 8 лет назад 0
Я добавил к своему ответу, что не могу воспроизвести с Excel 2007 на Windows 7, это то, что у меня на работе. Я постараюсь vpn домой .. Raystafarian 8 лет назад 0
Хорошо, я использовал 2013 w7 и добавил его в свой ответ. Та же проблема. 10 лет назад был Excel 2003, хотя .. @AndiMohr Raystafarian 8 лет назад 2
Кажется, у некоторых есть люди [есть] (http://answers.microsoft.com/en-us/office/forum/office_2013_release-excel/when-will-the-apply-names-bug-in-excel-be- fixed / 0eb23d54-fbf0-4c64-8bad-cf52bc32547f? db = 5) [помечено] (http://excelribbon.tips.net/T008266_Applying_Range_Names_to_Formulas.html) [this] (http://www.mrexcel.com/forum/) в качестве ошибки в Excel 2010 и 2013 в качестве ошибки в Excel 2010 и 2013 добавляется excel-questions / 705730-apply-names-существующие-Form.html). Одно из найденных мной предложений - установить [бесплатный инструмент управления именами от Jan Karel Pieterse] (http: // www.jkp-ads.com/officemarketplacenm-en.asp). Andi Mohr 8 лет назад 1
@AndiMohr благодарит за ссылку на сайт ответов MS. Это также [здесь] (https://social.msdn.microsoft.com/Forums/office/en-US/e8cb0b2e-45b1-4651-9d35-6280f9f0d370/how-do-i-get-an-acknowledgement-from- ms-of-the-bug-in-apply-names-in-excel-2010-2013? forum = exceldev) с указанием того, что он был размещен на сайте партнеров, но у меня нет доступа к нему. Мы можем просто [принять это] (http://superuser.com/questions/611854/prevent-excel-from-clearing-copied-data-for-pasting-after- sure-operations-w) Raystafarian 8 лет назад 1
Я добавил Excel 2016 к своему ответу - очень странно. @AndiMohr Raystafarian 8 лет назад 1
@ZygD Я впервые заметил, что «Apply Names» - это нечто. Всякий раз, когда в прошлом мне приходилось менять ссылки на ячейки для именованных диапазонов, я использовал `Find and Replace`. Есть ли причина, по которой это не сработает? Andi Mohr 8 лет назад 0
Добавлен еще один ответ с решением VBA. У него есть некоторые ограничения, но он должен работать. @AndiMohr Raystafarian 8 лет назад 1
В моем решении по макросам я ссылаюсь на мой вопрос в [code review] (http://codereview.stackexchange.com/q/112885/75587), кажется, что лучшим вариантом для обхода будет, вероятно, регулярное выражение. Я ни в коем случае не гуру регулярных выражений. Я думаю, что [Excellll] (http://superuser.com/users/76571/excellll) имеет приличный опыт работы с regex (и excel), но, скорее всего, вы найдете лучший обходной путь для [переполнения стека] (http: / /stackoverflow.com/questions/tagged/excel%20regex?mode=all). Raystafarian 8 лет назад 1

3 ответа на вопрос

2
Raystafarian

I can't replicate this (with my version of excel on Windows 7) -

enter image description here

If I define your names and then create formulas

enter image description here

Then apply names

enter image description here

I get the desired result -

enter image description here

How are you defining the names? I select the cell then click on its title to the left of the formula bar and type in the name.

enter image description here


With yours -

enter image description here

apply names -

enter image description here

As shown here

enter image description here


No change without "showing formulas" -

enter image description here

apply names

enter image description here


Okay, here we go. Office 2013, windows 7

enter image description here

apply names

enter image description here

Looks like a replicated failure.


Okay, let's try Excel 2016 on OSX Yosemite

Let's define our names and formulas -

enter image description here

Good, good, let's apply our names

enter image description here

What? Alert Formula is too long

enter image description here

Now it selected my count and.. what? Alert Microsoft Excel cannot find any references to replace

enter image description here

And it's a.. partial failure?

enter image description here

Okay then, let's do this manually -

enter image description here

Strange, it doesn't highlight the range, just the two cells?

But it works?

enter image description here

Just for comparison, a regular count highlights the range -

enter image description here

Попробуйте это с A1, B1 и C1, как в моем примере. ZygD 8 лет назад 0
@ZygD Я добавил твой пример, не могу воспроизвести. Raystafarian 8 лет назад 0
Я определяю имена так же, как вы. Я заметил, что вы делаете это с включенным * Показать формулы *, и я попытался сделать то же самое, думая, что именно так я могу решить свою проблему. Но, к сожалению, у меня все та же ситуация - `= name1` во всех 3 ячейках, в которых были формулы до использования * Apply Names *. ZygD 8 лет назад 0
Я также попытался использовать * Apply Names * с другим набором опций, которые появляются после нажатия этой кнопки в диалоговом окне. Нет успеха Как еще я могу помочь вам воспроизвести проблему? ZygD 8 лет назад 0
Я сделал это без показа формул и не изменилось. Вы уверены, что ваши имена все еще определены после того, как вы их применили? Raystafarian 8 лет назад 0
Да - имена все еще определены после использования Применить Имена. Я проверил это как в поле слева от панели формул, так и в Диспетчере имен. ZygD 8 лет назад 0
Добавьте вашу версию Excel и ОС к вашему вопросу, может быть, это имеет значение Raystafarian 8 лет назад 1
Да, я добавил свою попытку 2013 года и * могу * повторить. Raystafarian 8 лет назад 1
Добавлен 2016 и ... у него нет такой же проблемы, но он тоже не работает. Raystafarian 8 лет назад 1
Это просто удивительно ... новейшая версия Office ... :( Кстати, круто, у вас есть возможность тестировать разные версии Office, в том числе 2016;) ZygD 8 лет назад 0
1
Gary's Student

Скажем, мы начнем с:

enter image description here

и мы уже присвоили имена A2 и B2 . На вкладке "Формулы" раскрывающийся список :

Определить имя > Применить имена ...

enter image description here

Удостоверьтесь, что мы высветили оба имени и коснулись OK

и мы получаем:

enter image description here

и поэтому имена применяются!

Я попробовал это с вашими данными и именами. Да, это работает. Но, пожалуйста, попробуйте это с моими данными / именами, если вы хотите увидеть что-то интересное. ZygD 8 лет назад 0
Я попробую позже ................. Я постараюсь построить * макрос *, который может обрабатывать формулы в блоке ячеек ....... ........... Gary's Student 8 лет назад 0
Ты это пробовал? Вы не уверены, что поведение прослушивается? ZygD 8 лет назад 0
@ZygD ..... Я попробовал это ........... Я не могу заставить его работать надежно ............ Я все еще смотрю на макрос подход... Gary's Student 8 лет назад 0
1
Raystafarian

Как было отмечено в обзоре кода, это вызовет проблемы, если, например, он ищет «А1», находит «А10» и т. Д.

Хорошо, вот моя попытка обойти. При этом ваши формулы должны постоянно использовать абсолютные ссылки . Он работает на именованных диапазонах больше 1 ячейки.

Обратите внимание, что я ищу usedrange- но вы можете сузить это, как вам нравится, сбросив srchRng.

Option Explicit Sub FixNames()  Dim ClctNames As Variant Set ClctNames = ActiveWorkbook.Names  Dim rngName As String Dim rngNameLoc As String Dim strFrmla As String  Dim c As Range Dim n As Integer  'Define as needed Dim srchRng As Range Set srchRng = ActiveSheet.UsedRange  'For each name (n) in the collection For n = 1 To ClctNames.Count  'I'm storing the Named Range's name and address as strings to use below rngName = ClctNames(n).Name rngNameLoc = ClctNames(n).RefersToRange.Address  '--Should I break this out into a function? If so, at what point? For Each c In srchRng 'We only want to test cells with formulas If c.HasFormula = True Then 'We have to check if the cell contains the current named range's address If InStr(1, c.Formula, rngNameLoc, vbTextCompare) <> 0 Then 'Since these are perfect matches, no need to look for length or location, just replace strFrmla = Replace(c.Formula, rngNameLoc, rngName) c.Formula = strFrmla End If End If Next Next  'No error handling should be needed  End Sub 

Вам нужно использовать абсолютные ссылки, потому что когда я вытаскиваю именованный диапазон, RefersToRange.Addressон возвращает объект диапазона, а не диапазон, поэтому я устанавливаю его как строку. Я думаю, вы могли бы написать функцию, которая удаляет $абсолютные ссылки, если хотите.

это было весело

Благодарю. Я очень ценю ваш вклад. Я прочитал оба поста (здесь и в Code Review). Мне нравится, что вы загрузили свой код туда, и эти ребята дали очень ценные комментарии (голосовали за вопрос и ответы в ЧР). Я тоже проанализировал твой код. На мой взгляд, ограничения кода слишком велики, поэтому я бы не стал использовать его в какой-то важной книге. Как вы сами отметили - корпус А1 и А10. ZygD 8 лет назад 0

Похожие вопросы