Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159

Как удалить "хвосты" от удаленных вручную листов рабочей книги?

07.07.2025, 19:14. Показов 5478. Ответов 67
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Листы, создаваемые программным кодом, путем копирования из шаблонного, и имеющие программный код обработчиков своих предопределенных процедур, иногда (в результате сбоев в работе и остановки исполнения кода по ошибке) не могут быть так же -программно- и своевременно удалены из книги и остаются в виде не нужных "хвостов". Я периодически затирал их вручную тупо удалением листа через контекстное меню ярлыка листа и считал, что этого достаточно.
Как выяснилось, в инспекторе объектов эти объекты продолжают существовать, но не могут быть там же удалены вручную. Соответствующая опция просто не активна. По имени листа, например WorkSheets("Лист1").Delete программно он тоже не собирается удаляться. Ошибка.
Перебор листов рабочей книги через For Eaсh вообще не замечает их существования. Как будто их нет.
Как избавиться от таких объектов?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.07.2025, 19:14
Ответы с готовыми решениями:

Найти итоги из всех листов другой книги и записать в факт для всех выделенных значений рабочей книги
Написал макрос для проверки итогов с фактом. Как запустить всё это по циклу? Чтоб отрабатывался для...

Определить, сколько можно купить тетрадей по 12 листов, по 48 листов и по 96 листов, зная цену
Определить, сколько можно купить тетрадей по 12 листов, по 48 листов и по 96 листов, если цена...

Как в Excel печатать на одном листе бумаги сразу несколько листов рабочей книги
Уважаемые программисты, подскажите, пожалуйста, как в Excel печатать на одном листе бумаги сразу...

67
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
11.07.2025, 11:10  [ТС]
Студворк — интернет-сервис помощи студентам
В общем, обсуждение свелось к тому, "Что делать, чтобы не допустить возникновения проблемы?" Хотя, вопрос темы-то стоял: "Что делать, чтобы исправить последствия проблемы?" И на данном поприще тишь-печаль. Не продвинулись совсем. Кроме как перекинуть все нужное в другую книгу, оставив проблему на своем старом месте - больше никаких вариантов.
0
1412 / 874 / 93
Регистрация: 08.02.2017
Сообщений: 3,726
Записей в блоге: 2
11.07.2025, 11:26
Сфалерит, как вариант, можете поискать информацию по структуре файла vbaProject.bin, это же вроде с ним связано, если чего накопаете, будет интересно.
1
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
11.07.2025, 12:33  [ТС]
Спасибо. Одно из направлений - где копать - задано! Попорбую, вдруг на поверхности что есть.
0
1412 / 874 / 93
Регистрация: 08.02.2017
Сообщений: 3,726
Записей в блоге: 2
11.07.2025, 16:24
Посмотрел я тоже по этой теме, как, собственно не первый раз уже, раньше тоже пробовал разобраться, но в очередной раз убедился, что это гиблое дело. Хотя кому, как, кто-нибудь скажет, что это просто и в VB/A есть все для этого, ведь он является файлом OLE-документов, а работать с таким файлом можно посредством стандартных интерфейсов IStream и IStorage, как говорится в этой статье. Кстати, я доконца не понял суть этого абзаца.
Для чтения или обновления частей vbaProject.bin нужны вызовы родного API, представленного IStream для потоков и IStorage для контейнеров. Как примечание, обязательное использование вызовов родного API не позволяет исполнять клиентский код в среде частичного доверия, такой как Однократное нажатие: исполнение родного кода предполагает полное доверие.

Вверху статьи находится пример кода, считывающий произвольный контейнер OLE с помощью C++ и C#.
В той же статье приводится скрин структуры файла vbaProject.bin. Я нашел у себя также эту программку, которая использовалась в статье - DocFile Viewer (DFVIEW.EXE), открыл в ней vbaProject.bin из сабжевого файла, и в нем отобразились все эти битые листы. Вопрос, как их удалить?
1) наверное можно как-то применить код C++ и C# из приведенной выше статьи
2) Обратиться с вопросом в раздел https://www.cyberforum.ru/visual-basic/
3) Еще какие-то варианты
По-моему 2й вариант перспективный.
Но, другой вопрос, нужны ли все эти сложности, если есть готовое, и относительно простое решение с пересборкой документа.
0
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
12.07.2025, 01:35  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
2) Обратиться с вопросом в раздел https://www.cyberforum.ru/visual-basic/
Не думаю, что читающие сей раздел столь избирательны, что не заглядывают сюда. Скорее всего, что там, что здесь - пробегаются по темам одни и те же люди. И если здесь ответа нет, то и там его тоже не жди.

Добавлено через 2 минуты
Цитата Сообщение от testuser2 Посмотреть сообщение
Но, другой вопрос, нужны ли все эти сложности, если есть готовое, и относительно простое решение с пересборкой документа.
Нужны, потому что дают знания механизмов работы Ексель. А знания тянут за собой ряд решений смежных задач. Т.е, по-любому будут ограждать от ряда новых проблем в будущем. А преложенное относительно простое решение, оно в обратную, знаний не прибавляет. Скорее учит обходиться тем, что есть. Так то и я так программирую, обходять тем, что есть в голове. А от того код мой выглядит как белая ворона.
0
1412 / 874 / 93
Регистрация: 08.02.2017
Сообщений: 3,726
Записей в блоге: 2
12.07.2025, 01:53
Цитата Сообщение от Сфалерит Посмотреть сообщение
Скорее всего, что там, что здесь - пробегаются по темам одни и те же люди. И если здесь ответа нет, то и там его тоже не жди.
Там есть TheTrick (модератор), который сюда почти не заглядывает. Он мне как-то приводил пример с использованием IStorage и IStream (я правда там ни че не понял в его коде), там речь была про считывание файлов из зип-архива.

Добавлено через 5 минут
Вот этот топик Работа с zip архивами
0
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
12.07.2025, 11:12  [ТС]
Лучший ответ Сообщение было отмечено testuser2 как решение

Решение

Мне кажется, одно из решений обозначенной проблемы может быть таким.
1. Заметим, что лист, который есть в инспекторе объектов, но не существует физически в книге, появляется только из-за того, что я ручками убирал листы, которые оказались не нужными хвостами от прерванных процедур. Т.е., если руками не лезть и ничего не трогать, то все лишние объекты будут походить на обычные - есть физический лист и есть его представление в инспекторе объектов.
2. Если после сбоев повторно запускать программный код и программно пробовать восстанавливать привязку листа к соответствующей объктной переменной через set и имя листа, то в принципе объектная переменная инициализируется вполне корректно.
И тогда лист можно убирать стандартно через операцию Worksheets().Delete.
Такое удаление по идее не вызовет наличия никаких хвостов. Будет зачищено все корректно!
Т.е., главное правило, обеспечивающее отсутствие проблемы - никогда не удалять ручками лист, сгенерированный программно!
0
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
14.07.2025, 11:30  [ТС]
Да, задумка подтвердилась. Если "Зависшие" листы не трогать ручками, то можно их по имени снова "подхватить" уже другим кодом и при другом открытии файла и бесследно вычистить из книги через .Delete.
Главное, не затирать интерфейсы (видимые ярлыки) физически - вручную. Иначе остается та невычищаемая бяка, которая описана в теме.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.07.2025, 11:30

Перелистывние листов рабочей книги, с помощью ListBox
Подскажите кто знает как сделать перелистывание листов в рабочей книге с помощью ListBox...

Создать форму для заполнения листов рабочей книги «Калькуляция тура»
Помогите товарищи программисты) 1.Создать форму для заполнения листов рабочей книги «Калькуляция...

Вывести данные со всех листов книги с одного и того же столбца в один столбец на новом листе книги
Имеется книга Excel с несколькими листами. Первый лист используется для вывода информации...

Сохранение текущего листа с сохранением имени листа и присвоением новой книге имени текущего листа
Sub Save_as() With Application.FileDialog(msoFileDialogSaveAs) .InitialFileName =...

Как в рабочей книге добавить лист и назвать его по своей фамилии
Нужен макрос. Суть такова: в рабочей книге добавить лист и назвать его по своей фамилии. На этот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
68
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru