Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Ссылка на старый файл в именах в Диспечере имен, Проблема при переносе листа
 
Цитата
написал:
Всё-таки ещё раз рекомендую поработать с именами в исходном файле, чтоб исключить возникновение проблемы со ссылками на другую книгу в именах. Но немного по-другому.

Спасибо огромное за ответы! Должен извиниться, нашел пробел в имени файла, который появился недавно. Тем не менее, удаление пробела из имени файла, проблему не решило, макрос удаления имен так и не работал.

Проблему решил случайно. В стандартном макросе, удаляющим имена из экспортного файла (того листа с данными, на которым были неудаляемые имена), не было обработчика ошибок. Добавил в макрос "On Error Resume Next" и все заработало как должно.

Файл работал более 10 лет и макрос работал успешно без этой строчки. Моя догадка: После недавних изменений файла, видимо, возникла перекрестная связь между именами. Макрос, удаляющий имена, не мог выполнить задачу, потому что какое то из имен нужно было удалить первым, а потом другое. С данной процедурой обработки ошибок, макрос смог добраться до того имени, которое нужно удалить первым.  
Ссылка на старый файл в именах в Диспечере имен, Проблема при переносе листа
 
Цитата
написал:
Можно попробовать сделать так: в исходном файле переделать все имена с области Книга на область листа DataC. Тогда при копировании листа конфликта имён не будет.
Макрос делался для Excel2010, под ним всё нормально. Для других версий, возможно, есть нюансы.

Кстати, заметил, что апостроф к названию файла прямого отношения не имеет. Он появляется, если в полном названии листа есть пробел или некоторые другие служебные символы. Например, если имя ссылается на лист "Всем привет" в этой же книге, то апостроф появится: ='Всем привет'!$A$1:$B$2. Если название файла (точнее, окна) и листа не содержат пробела, то апострофа не появится: =[Пример1.xlsx]Лист1!$A$1:$B$2. Но если окно Пример1.xlsx закрыть, то в ссылке апостроф уже появляется:  ='D:\[Пример1.xlsx]Лист1'!$A$1:$B$2 - из-за слэша \. Если заново открыть файл, то исчезает.
Опять же, всё это для Excel2010.  
В исходном файле имена все локальные (DataC!$A$1:$B$2) и относительные. Нет ни одного абсолютного имени с указанием книги (файла). Они ведь автоматически, при создании, все локальные и такими создавались. Поэтому там нечего переделать.
Но при переносе листа в новый файл (пустой, там нет никаких имен), имена начинают ссылаться на исходную книгу. Они становятся абсолютными и уже содержат ссылку с указанием названия файла-источника, а то и пути к файлу, если лист переносится в книгу, в другую папку.

Все имена листов точно не содержат пробелов. Какие то макросы когда то не выполнялись на таких листах и пробелы я убираю сразу при создании листов уже много лет. По этой же причине не используется в любых названиях кириллица.  
Ссылка на старый файл в именах в Диспечере имен, Проблема при переносе листа
 
Цитата
написал:
Ситуацию по добавлению имени файла при копировании листа в другую книгу воспроизвести не удалось. Где и куда копать - непонятно.
Но можно потом макросом удалить все ссылки на другие файлы из Диспетчера имён активной книги: смотри вложение.
ЗЫ. Удаляются только имена файлов. Ошибочные имена (типа =#ССЫЛКА!...) не проверяются.
Спасибо за ответ.

Ссылка на файл источник появляется, если в файле источнике была ситуация с конфликтом имен. К примеру, в книгу-источник добавляли листы, содержащие имена, которые в Диспечере имен уже были. Но при добавлении Excel не может отказать в переносе на основнии конфликта имен, поэтому где-то системно начинает добалять ссылки на то, откуда это имя. И даже, если эти коонфликт имен успешно разрешить и убрать все ссылки, то при переносе листов в новую книгу, создаются ссылки в именах. Собственно мой вопрос в том, что как от этого избавиться?

Макросом эти имена не удаляются никак, как я писал вначале. При добавлении имен, в начале ссылки на диапазон ячеек, ставится имя файла источника. Они все начинаются на апостороф (в примере '[Oldworkbook.0.14.xls]DataC'!$A$6:$A$10). Макрос не может выполнить удаление таких имен, возникает ошибка
 
Изменено: viajador - 29.07.2022 09:52:36
Ссылка на старый файл в именах в Диспечере имен, Проблема при переносе листа
 
Уважаемые гуру, прошу помочь.

При переносе листа из активной книги, в том числе переносятся все имена (именованных диапазонов и т.д.). С какого то момента при переносе страницы из рабочей книги, имена в новом файле стали содержать ссылку на книгу, из которой был перенесен лист.
В текстоваом виде в Диспечере имен это выглядит так:
Код
Name=Trucks
Refers To='[Oldworkbook.0.14.xls]DataC'!$A$6:$A$10
А должна быть просто:
Код
Name=Trucks
Refers To=DataC!$A$6:$A$10
Так как все они содержат апостроф в начале ссылки ('), то удалить такие имена из Диспечера имен макросом не получается, можно только вручную, что делает работу бесполезной, т.к. там несколько десятков имен, а процесс создания новых файлов из старого происходит часто.

В других файлах, да и в этом, до какого-то момента, так не происходило. Как избавиться от этой ссылки в именах при копировании?
Изменено: viajador - 28.07.2022 23:06:56
Найти ячейку по имени, Найти именную ячейку
 
Цитата
написал:
Цитата
viajador написал:
Теперь бы еще вспомнить как я это сделал )
обратите внимание на №11. Если имя есть , оно работает, то значит просто оно скрыто.
Да, так тоже нашел. Спасибо большое всем за помощь!  
Найти ячейку по имени, Найти именную ячейку
 
Цитата
написал:
Добрый день!
Запустите вот этот макрос у себя в книге:
Код
    [URL=#]?[/URL]       1  2  3  4  5  6      Sub   ShowNames()    Dim   xName   As   Name    For   Each   xName   In   Application.ActiveWorkbook.Names          xName.Visible =   True    Next    End   Sub   
 
и попробуйте поискать еще раз в диспетчере имен свою ячеку
Спасибо! Да, этот вариант тоже сработал. Появилось имя в списке, все нашел!
Найти ячейку по имени, Найти именную ячейку
 
Цитата
написал:
viajador,
попробуйте создать данное имя в любом файл
Вы гений!  :)  Спасибо огромное!  :D
Действительно, такое имя не создалось и меня перекинуло в ту ячейку, которая проходит у книги под этим именем. Оказалось на том листе, где я думал, но я бы ее никогда не нашел!
Теперь бы еще вспомнить как я это сделал :)) Чтобы можно было повторить при случае
Найти ячейку по имени, Найти именную ячейку
 
Цитата
написал:
Цитата
viajador: Range("PS1")
это не имя, а адрес конкретной ячейки
Цитата
viajador: все листы защищены паролем, который постоянно обновляется при пересчете
посмотрите в коде, в какую ячейку "обновляется" пароль и делов-то
Это не может быть адресом. В листе столбцы заканчиваются на IV. До PS столбцы не доходят
Найти ячейку по имени, Найти именную ячейку
 
Цитата
написал:
viajador,
в VBA пароль только ставится или снимает тоже?
И ставится и снимается через VBA.

Я думал о том, что может быть макросом каким то можно найти такую ячейку. Имя то есть такое
Найти ячейку по имени, Найти именную ячейку
 
Цитата
написал:
viajador, Если не сохранилось рабочих версий файлов, то задача становится из разряда: пойди туда, не знаю куда.  Ну как вариант, удалять с листа все что на нем  и понятно к чему относится, и то что осталось изучать. в одной из ячеек будет тот самый пароль.
В том то и дело, что файл рабочий. Он работает без проблем, просто нужно его сильно поменять и поменять пароль в том числе. Но пароль задан в той ячейке.
В файле больше 15 листов, поэтому имя может быть только глобальное на всю книгу.
Макрос вызывается и работает на любом активном листе. Но ссылка на ячейку с названием и абсолютной ссылки на него в VBA нет.
Изменено: viajador - 25.07.2022 13:24:12
Найти ячейку по имени, Найти именную ячейку
 
Цитата
написал:
можно посмотреть через диспетчер имен
Нет. Там нет этого имени. Как то я его удалял оттуда, не помню как. Так я начинал искать
Найти ячейку по имени, Найти именную ячейку
 
Появилась необходимость переделать свою старую программу для подсчетов. Делал ее давно, больше 10 лет назад.
Файл сделан в формате 97-2004 (.xls).

В программе все листы защищены паролем, который постоянно обновляется при пересчете. Пароль записан на одном из листов книги в именной ячейке.
Защита идет при выполнении простого макроса, где значение пароля берется из ячейки PS1. Макрос выполняется и успешно работает на всех листах книги.
Код
Sub PS()
    Pass = Range("PS1")
    ActiveSheet.Protect (Pass)
End Sub


Проблема в том, что каким то образом я убрал имя ячейки из списка в менеджере имен и найти ее не могу. В VBA тоже ссылки на ячейку, кроме указанной выше, нет. Через поиск найти тоже не могу. Нужно найти где задается пароль и какой он, у меня в записях ничего не осталось.

Аксакалы, подскажите, пожалуйста, как найти эту именную ячейку? Все известные данные выше.
Задача не открыть и не снять пароль с листов, это я сделал. Нужно именно найти ячейку
Страницы: 1
Наверх