![]() |
как пакетно назначить имена для клеток excel?
Мне нужно определенному диапазону клеток размером 50 столбцов на 2000 строк присвоить произвольные имена. Как это можно сделать? Может кто скриптом VBA подсобит?
|
|
Если из эксель скопировать клетку и вставить ее через специальную вставку в ворд - получится связь. Изменив значение клетки в эксель - меняется значение в ворд. Так вот если клетку в эксель куда то перенести - связь теряется. Если клетке эксель предварительно дать имя, и затем сделать связь, то так связь ворд эксель не потеряется, так как ворд будет ссылаться не на координату а на имя клетки, которое является уникальным для листа.
Далее. У меня есть файл эксель с большими расчетами, состоящий примерно из 2000 строк и 50 столбцов. Вот для этого диапазона клеток мне нужно задать каждой клетке произвольное имя - допустим в формате "_******", где * - цифра произвольная. Вот это мне и нужно сделать. В нете нашел вот такой скрипт: HTML код:
Sub CopyFromExcel() |
Попробуйте убрать привязку к конкретной версии и обращаться по VersionIndependentProgID:
Код:
Set objExcel = GetObject(, "Excel.Application") P.S. У меня не получилось вставить связь, когда ячейке Excel присвоено имя (Microsoft Office 2003). |
Цитата:
Код:
Run-time error '438': Object doesn't support this property or method |
Pozia, как я уже писал:
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Pozia, попробуйте так: Код:
Option Explicit |
Iska, Спасибо. Буду пробовать днем. А что значит
Цитата:
|
|
Iska, не могу найти у себя в 2010 русском. Не могли бы вы подсказать в какой хоть области это должно быть?
|
|
Iska, у меня в 2010 есть только Microsoft Office 14.0 Object Library. Это то, что нужно? Если да, то все равно ошибка, как на фото. Еще прикрепил свой персонал. Что может быть не так?
И еще, я попутал. Нужно вставлять не "Неформатированный текст", а "Текст в формате RTF". Можно это в скрипте исправить? |
Pozia, зачем вы сделали вложение в формате .xlsb?
Ну в крайнем случае *.xla, чтобы 2003 мог понять Во-вторых, уберите все лишнее и оставьте только Код:
Selection.PasteSpecial |
Цитата:
|
Pozia, подождите Iska, а то я не совсем в теме
|
Цитата:
Цитата:
Суть вот в чём: код, приведённый в #8 нужно вставлять в проект того документа Microsoft Word, с которым мы работаем. Туда же добавлять и ссылку на «Microsoft Excel Object Library». Потом, когда всё заработает, можно будет подумать и о переносе кода в отдельный шаблон, ежели данный код Вам окажется потребен не только для одного документа. Цитата:
Код:
Selection.PasteSpecial , True, , , wdPasteText Код:
Selection.PasteSpecial , True, , , wdPasteRTF |
Iska, прошу прощения за свою тупоголовость ). Получилось. Сейчас попробовал на работе в глючном 2007 офисе и портабельном 2010. Наблюдалась только подвисание эксель секунд на 40 при первых двух трех вставках. Затем вроде нормально. У вас есть такие подвисания? Если нет, значит мои офисы кривые.
В шаблоне тоже прекрасно заработал. Спасибо огромное! ) Ваш скрипт сбережет кучу драгоценного времени ). И еще вопрос по работе скрипта. Если я несколько раз вставляю одну и ту же клетку, то скрипт в последующем это количество раз пропускает и называет клетку не по порядку. Можно ли как то это исправить? |
Механизм там такой:
* имена назначаются уровня рабочего листа, а не рабочей книги; * при повторном использовании того же диапазона просто назначается дополнительно ещё одно имя. Можно попробовать тот же механизм с обработкой ошибок, что и в «NameExists()». Вам надо, чтобы, при наличии у выделенного диапазона имени, не задавалось новое имя, а использовалось уже существующее имя диапазона, так? Цитата:
|
да. Нужно чтобы использовалось текущее имя при его наличие у клетки
|
Pozia, пробуйте:
Цитата:
|
Цитата:
|
Pozia, у меня присваивается. Описывайте подробно пример, а я попробую воспроизвести у себя.
|
Iska, разобрался, присваивает. Просто думал что каждой ячейке в выбранном диапазоне будет присвоено имя, что предпочтительнее для меня. Так можно сделать?
|
Цитата:
|
Цитата:
1. Решается вопрос, который звучит в шапке изначально. Это позволит в дальнейшем работать быстрее без скрипта там где его нет. 2. Постоянно сделав одну связь на какую то клетку, я затем в ворде просто ее копирую в другие нужные места, и связи вешаются. Если я скопирую диапазон ячеек с одним общим именем, то потом из него я не смогу копировать нужные мне ячейки в другие места документа ворд, связь повесится не верно. Поэтому, если это возможно сделать, буду признателен. В любом случае, еще раз огромное спасибо. Iska, правильно ли я исправил кусок кода для более наглядности: Код:
Do |
Цитата:
Код:
Option Explicit Цитата:
Цитата:
|
Цитата:
|
Iska, начал активно пользоваться скриптом и заметил, что часто вылетает ошибка как скрине. Отчего?
|
Цитата:
Цитата:
Цитата:
Я понимаю, Вы никак не хотите манипулировать целыми диапазонами, а в обязательном порядке давать имена исключительно отдельным ячейкам (хотя я не вижу в этом требовании никакой необходимости). Впрочем, дело Ваше, пусть будет так, пробуйте: Цитата:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Iska, По поводу глюков в работе скрипта - все Ок после смены винды.
Цитата:
Хотелось бы еще попросить Вас (простите за наглость) подкорректировать скрипт из вашего поста 27, чтоб он имена не удалял у ранее названных клеток. Простое присвоение имен клеткам как я сейчас понимаю мне тоже нужно. У меня есть еще связь между моим главным расчетным файлом эксель и файлами эксель "посредниками" между расчетным файлом эксель и SolidWorks, где тоже нужна твердая связь. И вот здесь пакетное именование клеток очень было бы кстати, чтоб потом просто вешать связи между файлами эксель. PS Не подскажете ли, как в ворд на скрипт задать горячую клавишу. В эксель это без проблем, в ворд приходится хитрить - включать запись макроса, дам задавать сочетание клавиш, а потом под записанный макрос подсовывать свой. |
Цитата:
Цитата:
Цитата:
|
Iska, спасибо, все отлично работает. повесил за эти дни около 3000 связей на имена клеток, красота.... )
|
Рад стараться :)! Тем паче, что и я кое-что узнал для себя нового:
Цитата:
|
Iska, очень нужна ваша неотложная помощь. Имеется большой файл экселя. Навесил кучу связей вашим скриптом. И ща заметил, что на один из листов экселя связи ворда ссылаются не на имена ячеек, а на координаты их. Почему то скрипт упорно не делает связи на имена ячеек именно на одном листе. Прикрепляю этот лист. Помогите пожалуйста разобраться.
Iska, методом тыка установил, что виной является буква "C" первая в названии листа. Почему так? |
|
Iska, это косяк не скрипта, а как минимум офиса 2010. создал только что новый документ, добавил к имени любого листа английскую букву С, задал имя для любой ячейки на этом листе и связь в ворд повесилась на координату, а не на имя. убираю букву С с названия, и связь вешается успешно
|
Pozia, воспроизводится ли сие поведение «вручную»?
|
Iska, да. Именно вручную последне сказаное и делал. Есть ли такое в 2003?
|
Iska, очень хочу вас попросить о помощи еще одной модификации вашего скрипта. В ходе работы пришел к тому, что иногда требуется назначить определенное имя клетки. Могли бы вы поправить скрипт так, чтобы при его запуске в эксель выскакивало окошко куда бы я мог ввести имя (в виде набора цифр) и которое применится к клетке с добавлением сначала и конца имени символа "_"? То есть ввожу 1234, а имя клетки получу _1234_. Спасибо еще раз за помощь, ваши скрипты подарили мне много сна ночью )))
|
Pozia, у нас присваивается набор имён всем ячейкам в выделении, а не одно имя. Что будем делать?
|
Iska, мне нужно присваивать вручную имя только одной клетке. а если случайно выделю несколько клеток и запущу макрос то пусть просто выскакивает ошибка, если можно.
|
Pozia, зачем Вам тогда макрос? Для создания одного имени используйте имеющиеся средства:
![]() |
Iska, это я знаю. только в этом случае дается имя относительно всего документа, а мне нужно относительно листа
|
Цитата:
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) |
Цитата:
|
Например, вызов процедуры, которую вам дал Iska
|
okshef, спасибо. попробую как до компа доберусь
|
okshef, Iska, ничего не вышло. сделал буквально, как сказал okshef, то есть вот так:
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) |
Подскажите пожалуйста еще как подсчитать количество именованных клеток на листе. Пробовал так: СЧЁТЕСЛИ(A1:AF828;"_*") но не выходит. Вот
здесь, пункт D есть какой то кусок кода для этого, но не пойму как его применить. Просто так не запускается |
Цитата:
Цитата:
|
Iska, я совсем чайник в этом (. Могли бы вы привести весь код как надо?
|
|
Постараюсь.
|
Iska, заметил, что код в посте 34 начинает именовать ячейки, начиная с последнего максимального имени. Но если я удалил ранее созданные имена ячеек, то все равно имя присваивается с конца. То есть имею имена _1_, _2_, _10_, _11_, _12_, и в этом случае при запуске макроса присваивается следующее имя имя _13_ а не _3_. Можно ли это учесть? Спасибо
|
Pozia, время нужно выделить потребное. Пока его нет. Я помню и про предыдущее.
|
Iska, доброго вечера. Может у Вас появилась минутка для помощи, случайно? :sorry:
|
Pozia, надо вспоминать ;).
|
Время: 20:41. |
Время: 20:41.
© OSzone.net 2001-