|
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
|
|
Как удалить "хвосты" от удаленных вручную листов рабочей книги?07.07.2025, 19:14. Показов 5506. Ответов 67
Метки нет (Все метки)
Добрый день.
Листы, создаваемые программным кодом, путем копирования из шаблонного, и имеющие программный код обработчиков своих предопределенных процедур, иногда (в результате сбоев в работе и остановки исполнения кода по ошибке) не могут быть так же -программно- и своевременно удалены из книги и остаются в виде не нужных "хвостов". Я периодически затирал их вручную тупо удалением листа через контекстное меню ярлыка листа и считал, что этого достаточно. Как выяснилось, в инспекторе объектов эти объекты продолжают существовать, но не могут быть там же удалены вручную. Соответствующая опция просто не активна. По имени листа, например WorkSheets("Лист1").Delete программно он тоже не собирается удаляться. Ошибка. Перебор листов рабочей книги через For Eaсh вообще не замечает их существования. Как будто их нет. Как избавиться от таких объектов?
0
|
|
| 07.07.2025, 19:14 | |
|
Ответы с готовыми решениями:
67
Найти итоги из всех листов другой книги и записать в факт для всех выделенных значений рабочей книги
Как в Excel печатать на одном листе бумаги сразу несколько листов рабочей книги |
|
Одесса - Украина
530 / 207 / 71
Регистрация: 01.04.2020
Сообщений: 629
|
|||||||||||||||
| 08.07.2025, 19:13 | |||||||||||||||
|
Где тут ваш алгоритм уже не говоря за логику?
В самом начале процедуры вы задали On Error GoTo eq (в случае ошибки переход к метеке eq) и тут же через пару строк вы ставите пропуск ошибок On Error Resume Next Далее ещё интереснее, вы через строку обнуляете все ошибки On Error GoTo 0 И таких обнулений уйма далее в коде. И такого хаоса если присмотрется к сожелению полно. Вопрос: Так когда и при каких обстоятельствах код перепрыгнет к метке eq и таких меток у вас в вашем файле полно? Правильно, Никогда! .И да,
3
|
|||||||||||||||
|
930 / 257 / 100
Регистрация: 21.10.2012
Сообщений: 621
|
||||||||
| 08.07.2025, 20:07 | ||||||||
I can классный спец. Он сказал что запуск с кучей проблем, и я ему верю. Вам дали советы где смотреть и как это делать, а Вы реагируете неправильно. MikeVol тоже дал хорошие советы, смотрите в этих направлениях. Когда много операторов On Error GoTo, запутаться проще всего.
3
|
||||||||
|
13270 / 5947 / 1529
Регистрация: 05.10.2016
Сообщений: 16,651
|
||
| 08.07.2025, 20:25 | ||
|
Корявость и несуразность кода - прямо пропорциональна убеждению его автора в своей непогрешимости и даже гениальности ... ![]() Часто можно наблюдать как подобные авторы начинают с защиты своей "нетленки" от копирования, еще до отладки основного интерфейса ...
0
|
||
| 08.07.2025, 20:38 | |
|
Не по теме: Эх. о-о-очень плохой получился рекламный ход продукта.
0
|
|
| 09.07.2025, 02:17 | |
|
По сабжу несколько ссылок из Яндекса
https://www.planetaexcel.ru/fo... &TID=45168 Чистка книг Excel была еще одна куда-то потерялась уже, там упоминался некий Code Cleaner
0
|
|
|
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
|
|||||||||||||
| 09.07.2025, 08:14 [ТС] | |||||||||||||
|
Добавлено через 6 минут Блоки On-Error имеют вложенную структуру. Вы в курсе? Предполагаю, что - нет. От того и не понимаете причины появления resume после goto. В целом нужно было, чтобы все не отловленные ошибки, которые я не предсказывал и не предполагал их существования, пересылались на eq А локально ошибка resume next обводит известную и предсказуемую ошибку, которая даже не ошибка, а один из вариантов состояния данных и алгоритм ниже resume next учитывает его возможное присутствие и отрабатывает именно его. resume next - защищает всего одну строку кода! И назначением ее является не обработка ошибки, а обратное - избегание перехода к обработке ошибок. Возникнет или не возникнет error в данном месте - зависит от данных и в общем виде не явлется ошибкой, поэтому, в данном случае оправдано не уходить на eq, что и сделано путем заключения этой строки кода в on error resume next, защищающий исполнение программы от не нужного ветвлелния на eq. Т.е. там, где Вы не видите логики, вы ее просто не видите. Но она вполне себе заложена и отрабатывает, как и полагается. Поэтому, прежде чем спешить критиковать чужой код, рекомендую вникать в него и думать. Добавлено через 6 минут Зона действия On error goto eq отлавливает ошибки одних строк кода. On error resume next - других. Соответственно, обработка разных ошибок производится по разному и разным кодом. Мне жаль, что столь простые вещи Вам не понятны и мне приходится пояснять это. Добавлено через 6 минут АО8 RF B15 377 Логпрог означает: АО8 - БД (Тема), в рамках которой создан и контролируется файл. RF - аббревиатура, обозначающая, что это электронный файл. B - количество символов, которым кодируется номер файла в теме. (А - 1, B-2 C-3 и так далее. Нужно для того, чтобы при сортировке по названию файлы ложились по-порядку в каталоге, а не 10 рядом со 100.) 15 - порядковый номер файла в списке зафиксированных в теме файлов. 377 - номер версии файла. Логпрог - стандартная текстовая часть имени файла. Все стоящее перед именем система генерирует сама. Причем именно этот же файл сам себя и переименовывает от версии к версии. У меня есть все 377 версий файла. Но есть еще не менее трехсот более ранних, которые делались до перехода на xlsm файлы и формат которых был xls. Так что сомнения ваши - часть вашей ментальности. Добавлено через 3 минуты Добавлено через 1 минуту Добавлено через 1 минуту Добавлено через 4 минуты Мой функционал ограничивает только ваша фантазия. Стабильные версии я открываю для чтения. Версии, находящиеся под наблюдением работы нового кода открываю с возможностью править. Все правки я делаю во время основной работы программы. У меня нет времени заниматься отдельно процессом отладки. Есть рабочие базы данных - магазин функционирующий в том числе. Ежедневно программа работает по разным направлениям и "на горячую" правится, если возникает какой-то новый, до селе не возникавший сбой. Добавлено через 1 минуту Не могу изменить значение константы. Excel падает Добавлено через 1 минуту Добавлено через 1 минуту Добавлено через 6 минут
0
|
|||||||||||||
|
Одесса - Украина
530 / 207 / 71
Регистрация: 01.04.2020
Сообщений: 629
|
|
| 09.07.2025, 11:20 | |
|
Сфалерит, Ну-ну, вам виднее... Продолжайте далее лепить оператор On Error а бы куда. Я бы даже посоветовал бы его лепить хоть через строку.
![]() И это как я уже выше писал - всего лишь что бросилось сразу в глаза. Далее я не стал смотреть в вашей портянке, страшно стало, о-о-очень. Удачи вам в кодинге, есть вам куда ещё расти.
0
|
|
|
|
||||||
| 09.07.2025, 11:38 | ||||||
|
Сам код обычно не перегружает книгу, перегружают объекты.
Вот несколько макросов для очистки книг от разного мусора:
Большие программы со временем проходят эволюцию, обычно к улучшению. Но иногда накапливается и мусор - у меня это не удаленные вовремя объявления неиспользуемых переменных. И конечно лучше все разбивать на модули по смыслу.
1
|
||||||
|
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
|
|
| 09.07.2025, 11:57 [ТС] | |
|
Благодарю. Но сей макрос, как вижу, не решает проблемы, обозначенной в теме.
Листы чистить нет нужды, потому что при подключении БД они автоматом генерируются Логпрогом и на них заливается запрошенная пользователем информация из подключенных БД. После того, как пользователь с этой информацией отработал, листы удаляются программым кодом. Поэтому, накопления лишних данных на листах не происходит. Ссылки на другие книги я вообще не пользую. Подход иной. Есть программа обработчик баз данных. (БД). Она же - Логпрог. Есть сами файлы баз данных. Одно живет отдельно от другого. Разные файлы с разной организацией. Файлы БД не имеют никакого кода и никакого форматирования. Только упорядоченно организованные наборы данных. На старте создания БД собрана в единый файл с несколькими листами данных. По мере заполнения листов и появления критического для одного файла объема информации, файл БД отдельными процеурами дробится на несколько и БД превращается в распределенную. Объем хранения информации в ней фактически не ограничен, так как есть давно отлаженные механизмы дробления базы на сегменты. Соответственно, при запросе данных просто подгружаются нужные файлы БД и после окончания работы они выгружаются. Вместо ссылок используется прямой программный доступ к данным из подгруженных файлов. База прекрасно работает с таблицами, длина которых превосходит ограничение на число строк в рабочем листе Эксель. Отдельные таблицы, связанные с анализом прайс-листов поставщиков у меня содержат по нескольку сотен тысяч записей и все это вполне себе не подает признаков приближения к пределу возможностей программы. Сколько нужно, столько и кушает и затем выдает на гора по мере необходимости пользователя. На счет названий переменных... там их десятки тысяч. У меня фантазии не хватит каждой придумывать не повторяющееся имя. У меня давно сложилась практика в объявлении переменной писать максимально подробно ее назначение. Ибо имя как не напиши, все равно оно как правило малоинформативно оказывается. А вот когда имена все начаты с префикса процедуры, в которой они объявлены и просто по порядку пронумерованы, то тут просто тупо делится экран редактора на два окна горизонтальным разделителем. вверху зона описания переменных. Нижнее окно - код, с которым работаешь. В итоге в коде Все кратко, лаконично и четко. А перед глазами в верхней части подробный мануал, что зачем и почему.
0
|
|
|
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
|
|
| 09.07.2025, 12:30 [ТС] | |
|
Ну, мне нужно, потому что когда я это делал, стоимость обслуживания лицензионной 1С была более 20ки в месяц, если ничего не делать и не дорабатывать. А если учесть, что я практически ежедневно расширял возможности, дорабатывая под себя то, чего в С-ке реализовать гораздо сложнее (язык программирования 1С я немного знаю. Баловался когада-то) то получалось бы все 50. А мне зачем этот полтинник, которого у меня в общем-то и нет, отдавать кому-то? Мне проще было самому лепить под себя и совершенствовать то, что мне нужно, без всяких 1С, требующих куда больше человеко-часов кодирования для того, чтобы получать то, что я могу сделать быстрее в экселе. Присутствие 1С в своем офисе, как и приглашение программеров на ее доработку я уже проходил. Это дорого и не эффективно, по сравнению с тем, что я делаю себе в Экселе.
Я в торговле работаю четверть века. За это время много раз убедился, что эффективнее получать нужный мне результат, кодируя в Екселе, чем настраивать весьма неповоротливых монстров, типа 1С, которые в итоге все равно не будут в полной мере делать то, что мне хочется.
0
|
|
|
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
|
|
| 09.07.2025, 12:35 [ТС] | |
|
Вот так выглядит окно редактора, когда я пишу или отлаживаю код. Расшифровка по переменным перед глазами. Мне удобно.
0
|
|
| 09.07.2025, 13:49 | ||
|
Если удаление листов происходит где-то в середине кода, лушче перенести это в конец, или делать отложенное удаление, с помощью Application.OnTime в отдельной процедуре.
0
|
||
|
930 / 257 / 100
Регистрация: 21.10.2012
Сообщений: 621
|
||||||||||
| 09.07.2025, 14:55 | ||||||||||
|
testuser2 дал хороший ответ в пост.№ 34. Но, обратите ли Вы на него внимание, тем более об этом и раньше Вам писали, только без ссылок.
0
|
||||||||||
| 09.07.2025, 15:32 | |||||||
Насчет удаления сбойных листов из проекта, тоже чего-то пишут на стаке https://stackoverflow.com/ques... eet-in-vba
0
|
|||||||
|
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
|
||||
| 09.07.2025, 17:01 [ТС] | ||||
|
Работа с пользователя с создаваемыми листами ведется по принципу стека. Последний создан - первым будет удален. Соответственно, удалять приходится в середине работы. Но... конечно, удаление можно и отложить, сразу не удаляя, а лишь скрывая. Но в том сложности тоже. Дело в том, что созданных листов за сеанс работы можно наплодить кучу, которая приведет к перегрузу оперативной памяти, которую занимает файл. Поэтому, все же удалять придется в процессе работы, а не отложено. Но еще раз подчеркну, что разбор полетов за много лет показал, что все глюки, с которыми сталкивался, были вызваны отнюдь не с программным удалением листов, а как раз с тем, что до исполнения кода удаления не дотянуло и процесс выполнения программы оборвался ранее. Добавлено через 2 минуты Добавлено через 4 минуты
0
|
||||
|
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
|
|
| 09.07.2025, 17:07 [ТС] | |
|
Как летают мои самолеты - мне вполне нравится. Ибо за час работы я порой могу сгенерировать по 20-30 разных форм и таблиц, совершенно разноплановых. Нужно посмотреть контактные данные - табличка выходит. Нужно глянуть детали по конкрентому лицу - снова табличка. И так бесконечно табличка за табличкой. Каждая из них сгенерирована на своем отдельном листе. Они могут сосуществовать одновременно. Но не нужные закрываются с удалением листа. Это нормальный процесс работы в моей программе. Все время генерируются новые листы и все время удаляются те, с которых нужная информация прочитана.
Программа не предлагает статичный набор таблиц. Это динамика! Таблицы генерируются заново из БД одна за другой. Разные. Разноплановые и с разным объемом выборки. Т.е. я не работаю с таблицами баз даных напрямую. Прямого доступа к ним нет. Я работаю с копиями информации и мой обработчик Логпрог сливает в БД правки, которые я произвел по команде сохранения изменений. После сохранения изменений рабочий лист с копией попавших в рабочую выборку записей тупо удаляется. Так сделано ради защиты данных от случайной потери или искажения. Можно спокойно затереть весь рабочий лист. Но при этом вся информация спокойно и без перемен остается в базе данных и в любой момент можно сгенерировать опять затертый ранее нечаянно или умышленно лист данных.
0
|
|
| 09.07.2025, 17:07 | |
|
Перелистывние листов рабочей книги, с помощью ListBox Создать форму для заполнения листов рабочей книги «Калькуляция тура»
Сохранение текущего листа с сохранением имени листа и присвоением новой книге имени текущего листа Как в рабочей книге добавить лист и назвать его по своей фамилии Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
|
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи.
. . .
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|