![]() |
|||||||||||
Как узнать Item листа в книге Excel09.07.2012, 13:35. Показов 38396. Ответов 23
Метки нет Все метки)
(
есть большая книга (листов больше 1000)
Не ругайте - так удобнее мне для своих целей Name листов меняются программно, а item - величина постоянная Мне нужно оперировать доступом к конкретному листу по Item, для чего его сначала нужно узнать что-то типа
и правильно ли я дальше действую:
0
|
09.07.2012, 13:35 | |
Ответы с готовыми решениями:
23
Как узнать размер листа в Excel? Создание листа в рабочей книге Excel |
призрак
![]() |
|
09.07.2012, 13:55 | |
у листа есть неизменяемое (read-only) свойство CodeName.
но обращаться к листу, зная его CodeName - довольно хлопотно.
1
|
![]() |
|
09.07.2012, 14:58 [ТС] | |
а index не меняется, если лист относительно других листов поменяет свое положение?
у меня листы тасуются в ходе работы пользователем (мной, лентяем), как колода карт блин.... и чем CodeName отличатеся от Item? вроде именно Item предназначен для таких целей... вот только криво как-то он реализован для листов... или я криво к нему обращаюсь...
0
|
1703 / 190 / 19
Регистрация: 20.11.2011
Сообщений: 281
|
|
09.07.2012, 15:14 | |
Обращаться по item, index - самый ненадежный способ. Используйте свойства name, или как советовал Александр(ikki) - codename. А Ваш вариант как раз:
id_sheet = ActiveSheet.Index - индекс листов меняется из-за удаления-добавления-перемещения. Саш, ток я не понял, почему хлопотно codename? Чаще даже удобней, чем name:-)
0
|
призрак
![]() |
||
09.07.2012, 15:24 | ||
(work)sheets() требуют либо номер, либо имя. по CodeName - через цикл перебора листов (именно это я и называю "хлопотно"). конечно, можно использовать CodeName непосредственно в тексте макроса, но это если оно известно (лист существует) на этапе разработки. Добавлено через 2 минуты AndreA SN, у листа нет свойства Item. это "умолчальное" свойство коллекции листов. Sheets.Item("Лист1") и Sheets("Лист1") - одно и то же.
1
|
призрак
![]() |
|||
09.07.2012, 15:34 | |||
kuklp, ну я ж писал:
![]() спасибо, успел поправить.
0
|
призрак
![]() |
||||||
09.07.2012, 22:40 | ||||||
![]() Решение![]() у листа рабочей книги (объекты worksheet, chart) есть свойства index, name, codename index - текущий номер листа по порядку (включая скрытые), может меняться пользователем при изменении порядка и количества листов; name - то, что отбражается на ярлычке, может меняться пользователем (конечно. если книга не защищена); codename - "внутреннее" имя листа, "обычному" пользователю невидимое и недоступное, поэтому не может меняться пользователем. кроме того, codename является свойством read-only и через VBA также не может быть изменено. *) в VBE в окне проекта в списке объектов сначала указаны кодовые имена листов, а затем, в скобках, "обычные" имена. "обычные" и "необычные" ("кодовые") имена могут совпадать, могут - нет. но в пределах каждого из множеств имён имя должно быть уникальным (без учета регистра символов) изменить codename можно через интерфейс VBE - ЛКМ по имени листа в списке объектов - F4 - свойство (Name) - именно которое со скобками. доступ к отдельному листу возможен: - по индексу - по "обычному" имени и для того, и для другого, используется свойство item коллекций sheets, worksheets, charts объекта workbook: sheets.item(2) charts.item("диаграмма 5") и т.п. т.к. свойство item является "умолчальным", то допустимы и конструкции sheets(2) charts("диаграмма 5") прямого доступа по "кодовому" имени листа через коллекцию - нет. но, зная codename листа на этапе разработки проекта (макроса). можно прямо это имя написать в качестве идентификатора листа: лист1.[a1] - обращение к ячейке A1 листа с кодовым именем "лист1" ("Лист1" и т.п.) если же нужно получить лист по кодовому имени, но на этапе разработки оно было неизвестно, то примерно так:
![]() _________________________ *) однако, может: Как узнать Item листа в книге Excel
8
|
![]() ![]() ![]() |
|
10.07.2012, 00:03 | |
Такое великолепное описание, почти мини-статья.
![]() Даже сохраню ссылку для других, чтобы не объяснять. P.S. всегда раньше считал, что лист1.[a1] обращается к обычному имени листа, а это не так. А все потому, что по-умолчанию кодовое имя листа = обычному его имени.
0
|
призрак
![]() |
|
10.07.2012, 03:48 | |
забыл написать: изменение CodeName в отличие от Name разрешается в пределах, обычных для идентификаторов VBA - оно должно начинаться с буквы, содержать буквы, цифры, знак подчеркивания, т.е. следующие имена для свойства CodeName недопустимы:
"123" 123 1лист лист 1 лист.1 sheet%% кроме того, оно не должно совпадать с ключевыми словами VBA - такими как for, to, sub указать же любую из этих строк в качестве "обычного" имени листа (Name) вполне можно. правда, там свои ограничения - например, обычному имени в русской локали нельзя задать "журнал", а свойству codename - можно.
2
|
1703 / 190 / 19
Регистрация: 20.11.2011
Сообщений: 281
|
|||||||
10.07.2012, 07:51 | |||||||
![]() Решение
3
|
призрак
![]() |
||
10.07.2012, 08:35 | ||
спасибо за поправку.
хотя странно выглядит - sheets являются объектами книги, а их свойство codename меняется только через vbcomponents()... а почему разрешено только так? не в курсе? Добавлено через 11 минут ![]() а программно её можно снять/установить?
0
|
призрак
![]() |
||
10.07.2012, 08:57 | ||
умгу...
я не там искал - в свойствах проекта... а надо было в параметрах книги. спасибо. ![]() ээээ.... ![]() (я вдруг обнаружил в себе желание стать хакером ![]()
0
|
1703 / 190 / 19
Регистрация: 20.11.2011
Сообщений: 281
|
|
10.07.2012, 09:01 | |
Дерзай, авось получится:-)
0
|
10.07.2012, 09:01 | |
Помогаю со студенческими работами здесь
20
Как узнать имя активного листа в Excel-е? Как узнать точную высоту листа в Excel?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
![]() |
||||
Пишем адаптер для локального хранилища S3 на C#
stackOverflow 16.07.2025
Разработка современных приложений часто требует интеграции с объектными хранилищами, и Amazon S3 стал де-факто стандартом в этой области. Однако работа с облачными сервисами в процессе разработки. . .
|
Старые замки
kumehtar 16.07.2025
Смотрел тут фото, попались пара старых замков. И сразу бросилось в глаза из отличие. Например:
Замок Бистон, в англии. Разрушенное сооружение. Но - не испорченное людьми, по крайней мере - на. . .
|
Java и Eclipse Store: Сверхбыстрые приложения с In-Memory DB
Javaican 15.07.2025
Eclipse Store — это микро-движок персистентности для Java, который позволяет хранить и извлекать нативные Java-объекты без необходимости преобразования данных или использования объектно-реляционного. . .
|
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
|
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
|
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
|
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
|
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
|
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
|
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
|