Имеется макрос благодаря которому имя листа изменяется в соответствии со значением определенной ячейки на этом же листе. Проблема в том, что далее к другим листам применяются иные макросы, которые ссылаются на предыдущий лист имя которого постоянно меняется. Как в последующих макросах прописать ссылку не на имя листа, а на номер листа? Возможно ли такое решение?
П.С. Прикреплять файл не вижу смысла. Спасибо большое.
…и переименовать там, где на скрине показано. Обращение к листу изменится (по ссылке инфа).
Или же просто обращаться к номеру листа (он уникален). По скрину будет Sheets(13) - без кавычек, обратите внимание. В таком случае обращение к листу не изменится…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
sokol92, вы как всегда правы - это, оказывается, обращение к порядковому номеру листа, что весьма чревато… Спасибо за науку!
kargapolov, переименование через Properties в VBA и обращение типа newsheet.range() (или какой там объект листа, кроме простого диапазона нужен и где newsheet - это то имя листа, которое задали) — НАМНОГО удобнее и надёжнее!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Wiss, ответный резонный вопрос - зачем? Программное имя листа - это же не имя ярлыка листа. В большинстве случаев, меняют именно имена ярлыков.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous написал: Wiss , ответный резонный вопрос - зачем?
Jack Famous, мне понравилась идея возможности задать имя листа и использовать его в дальнейшем без объявления объектной переменной. При работе с одной книгой это возможно даже будет оправдано, а вот с несколькими уже беда будет, но все равно "WbOld.shReport" короче, чем "WbOld.worksheets(strShReportName)". Так что первый вопрос, который возник был: "А как это "скрытое" имя листа получить и задавать". Гугл как-то сразу ответ не дал, вот я и поинтересовался. С вопросом, кстати, я угадал. Там те ещё пляски с бубнами при задании CodeName. Для меня пока лучше сразу забыть про возможность программного указания данного свойства - слишком много "Если" для использования этой функции где-то кроме своей личной машины.
не понимаю, какую беду вы имеете ввиду. При работе с 2мя и более книгами, вы всё равно будете использовать полный путь (с именем книги и пути к ней то есть), а значит, в 2х разных книгах у вас могут быть одинаковые программные имена листов (что, кстати, может быть даже очень удобно).
К слову, с именами ярлыков листов такая же петрушка (кроме описанных рисков для ярлыков, связанных с переименованием) - так что лично я не вижу минусов. А статью Дмитрия почитать будет полезно — Дмитрий, спасибо за науку!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous написал: При работе с 2мя и более книгами, вы всё равно будете использовать полный путь (с именем книги и пути к ней то есть), а значит, в 2х разных книгах у вас могут быть одинаковые программные имена листов (что, кстати, может быть даже очень удобно).
Так-то оно так, но после открытия всё равно сразу придётся писать
Код
set wbNew = activeWorkbook
set shNewReport = wbNew.worksheets("Отчёт2018")
если я не планирую закрыть книгу строчек через 5 кода, а потом shNewReport можно использовать уже без указания книги (вроде бы). А вот с CodeName придётся ссылаться на книгу.
Переименовывание пользователем листов книги это извечная головная боль для меня. При использовании CodeName получается, что и волки сыты и овцы целы, так что надо будет попробовать. То, что CodeName задать программно не совсем получается - не беда, всё-равно новые книги чаще всего получаются путём копирования активной.
kargapolov написал: Имеется макрос благодаря которому имя листа изменяется в соответствии со значением определенной ячейки на этом же листе.
если перестать изьясняться ребусами, а просто описать задачу, которую Вы решаете, и трудности, в которые уперлись в ходе решения - это существенно ускорит процесс получения точного ответа на поставленный вопрос.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
vikttur, согласен - у меня напрямую тоже не получается (очень удивлён - спасибо за замечание) Через костыли по ссылке от Казанского, можно узнавать имя ярлыка листа через его программное имя и далее по-старинке (убиваем 2х зайцев). При этом также соглашусь с Игорем Гончаренко по поводу того, что всего этого может быть и не нужно.
Замечу, что при работе с другими книгами мне больше понравился метод "открыть книгу, скрыв это от пользователя — Workbook.Open" (ссылка). GetObject не захотел вносить изменения в другую книгу + некорректно "закрывал книгу навсегда", а ADO я пока боюсь
Так или иначе, ТС (да и я) узнал новое из этой темы - а значит день прожит не зря
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄