Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Ссылание в макросе на номер листа, а не на имя листа.
 
Имеется макрос благодаря которому имя листа изменяется в соответствии со значением определенной ячейки на этом же листе.
Проблема в том, что далее к другим листам применяются иные макросы, которые ссылаются на предыдущий лист имя которого постоянно меняется.
Как в последующих макросах прописать ссылку не на имя листа, а на номер листа? Возможно ли такое решение?

П.С. Прикреплять файл не вижу смысла.
Спасибо большое.
Изменено: kargapolov - 27 Мар 2018 17:16:14
 
См. тут
Владимир
 
kargapolov,
Цитата
sokol92 написал:
См.  тут
…и переименовать там, где на скрине показано. Обращение к листу изменится (по ссылке инфа).

Или же просто обращаться к номеру листа (он уникален). По скрину будет Sheets(13) - без кавычек, обратите внимание.
В таком случае обращение к листу не изменится…
1.png (24.94 КБ)
Изменено: Jack Famous - 27 Мар 2018 17:38:08
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Цитата
Jack Famous написал:
В таком случае обращение к листу не изменится…
Не соглашусь в части номеров листов. Проводим эксперимент:
  1. создаем новую книгу минимум из двух листов: "Лист1",  "Лист2", ...
  2. меняем их местами, перетягивая ярлычок
  3. выдаем:
Код
MsgBox Sheets(1).Name
Владимир
 
sokol92, вы как всегда правы - это, оказывается, обращение к порядковому номеру листа, что весьма чревато… Спасибо за науку!  :)

kargapolov, переименование через Properties в VBA и обращение типа newsheet.range() (или какой там объект листа, кроме простого диапазона нужен и где newsheet - это то имя листа, которое задали) — НАМНОГО удобнее и надёжнее!
Изменено: Jack Famous - 27 Мар 2018 18:33:41
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Возникает резонный вопрос: "А как программно менять это (name)!?"
Я не волшебник, я только учусь.
 
Wiss, ответный резонный вопрос - зачем? Программное имя листа - это же не имя ярлыка листа.
В большинстве случаев, меняют именно имена ярлыков.
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Цитата
Wiss написал:
А как программно менять это (name)
есть у меня в загашнике подробная статейка... :)
Кодовое имя листа - что это и зачем нужно? Какие плюсы и минусы?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий Щербаков, спасибо большое. Очень познавательная статья.

Цитата
Jack Famous написал:
Wiss , ответный резонный вопрос - зачем?
Jack Famous, мне понравилась идея возможности задать имя листа и использовать его в дальнейшем без объявления объектной переменной. При работе с одной книгой это возможно даже будет оправдано, а вот с несколькими уже беда будет, но все равно "WbOld.shReport" короче, чем "WbOld.worksheets(strShReportName)". Так что первый вопрос, который возник был: "А как это "скрытое" имя листа получить и задавать". Гугл как-то сразу ответ не дал, вот я и поинтересовался. С вопросом, кстати, я угадал. Там те ещё пляски с бубнами при задании CodeName. Для меня пока лучше сразу забыть про возможность программного указания данного свойства - слишком много "Если" для использования этой функции где-то кроме своей личной машины.
Изменено: Wiss - 28 Мар 2018 00:16:38
Я не волшебник, я только учусь.
 
Цитата
Wiss написал:
с несколькими уже беда будет
не понимаю, какую беду вы имеете ввиду. При работе с 2мя и более книгами, вы всё равно будете использовать полный путь (с именем книги и пути к ней то есть), а значит, в 2х разных книгах у вас могут быть одинаковые программные имена листов (что, кстати, может быть даже очень удобно).

К слову, с именами ярлыков листов такая же петрушка (кроме описанных рисков для ярлыков, связанных с переименованием) - так что лично я не вижу минусов. А статью Дмитрия почитать будет полезно — Дмитрий, спасибо за науку!  :idea:
Изменено: Jack Famous - 28 Мар 2018 00:17:01
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Цитата
Jack Famous написал:
При работе с 2мя и более книгами, вы всё равно будете использовать полный путь (с именем книги и пути к ней то есть), а значит, в 2х разных книгах у вас могут быть одинаковые программные имена листов (что, кстати, может быть даже очень удобно).
Так-то оно так, но после открытия всё равно сразу придётся писать
Код
set wbNew = activeWorkbook
set shNewReport = wbNew.worksheets("Отчёт2018")
если я не планирую закрыть книгу строчек через 5 кода, а потом shNewReport  можно использовать уже без указания книги (вроде бы). А вот с CodeName  придётся ссылаться на книгу.

Переименовывание пользователем листов книги это извечная головная боль для меня. При использовании CodeName получается, что и волки сыты и овцы целы, так что надо будет попробовать. То, что CodeName задать программно не совсем получается - не беда, всё-равно новые книги чаще всего получаются путём копирования активной.
Изменено: Wiss - 28 Мар 2018 00:38:29
Я не волшебник, я только учусь.
 
Цитата
Jack Famous написал:  в 2х разных книгах у вас могут быть одинаковые программные имена листов
Пробовали обратиться к кодовому имени листа другой книги? Проблема...
 
Цитата
kargapolov написал:
Имеется макрос благодаря которому имя листа изменяется в соответствии со значением определенной ячейки на этом же листе.
если перестать изьясняться ребусами, а просто описать задачу, которую Вы решаете, и трудности, в которые уперлись в ходе решения - это существенно ускорит процесс получения точного ответа на поставленный вопрос.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
kargapolov, может пригодится https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=8&TID=17715&TITLE_SEO=17715-kak-sdelat-ssylku-na-predydushchiy-list
 
vikttur, согласен - у меня напрямую тоже не получается (очень удивлён - спасибо за замечание)  :idea:
Через костыли по ссылке от Казанского, можно узнавать имя ярлыка листа через его программное имя и далее по-старинке (убиваем 2х зайцев).
При этом также соглашусь с Игорем Гончаренко по поводу того, что всего этого может быть и не нужно.

Замечу, что при работе с другими книгами мне больше понравился метод "открыть книгу, скрыв это от пользователя — Workbook.Open" (ссылка). GetObject не захотел вносить изменения в другую книгу + некорректно "закрывал книгу навсегда", а ADO я пока боюсь  :)

Так или иначе, ТС (да и я) узнал новое из этой темы - а значит день прожит не зря  ;)
Изменено: Jack Famous - 28 Мар 2018 11:14:15
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Всем спасибо. Разобрался. Все получилось.
Страницы: 1
Читают тему (гостей: 1)