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

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

07.07.2025, 19:14. Показов 5506. Ответов 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
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4088 / 2469 / 514
Регистрация: 13.12.2016
Сообщений: 8,397
Записей в блоге: 5
08.07.2025, 17:24
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Eugene-LS Посмотреть сообщение
6-8 часов, к сожалению
Для меня может и больше, но для стандартного пользюка в офисе час-полтора вместе с поднятием почтовых ящиков, настройкой сканеров и принтеров.
0
Одесса - Украина
 Аватар для MikeVol
530 / 207 / 71
Регистрация: 01.04.2020
Сообщений: 629
08.07.2025, 19:13
Цитата Сообщение от Сфалерит Посмотреть сообщение
причиной каких-либо проблем в моем коде
Не было б причин вы бы не создавали тему с заголовком
Цитата Сообщение от Сфалерит Посмотреть сообщение
Как удалить "хвосты" от удаленных вручную листов рабочей книги?
Цитата Сообщение от Сфалерит Посмотреть сообщение
прежде всего, ошибки алгоритма, вызванные недоработками его логикики
Вот тут вы правы, нет кикако-го алгоритма и никакой логики, сами же так закодили. Смотрим ваш код, первое что мне попалось в глаза:
Где тут ваш алгоритм уже не говоря за логику?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim kc10 As String 'путь на удаляемый файл
Dim kc11 As String 'часть имени старого, - удаляемого - файла, которая является системной.
Dim kc12 As Byte ' номер позиции начала группы символов "NEW_FV" в имени текущего файла
Dim kc13 As String 'имя файла, возвращенное командой dir
Dim kc14 As String 'имя предшествующей версии файла базы данных
Dim kc15 As String 'путь на базу данных.
Dim p As String 'имя флагового для переименования логпрог файла.
Dim p1 As String ' подтвержденное командой Dir значение p
Dim q As String ' N-temp имя временного файла
Dim r As String 'имя макроса кс, запуск которого из N-temp глючен и долже
Dim s As Byte 'errorlevel от ka.
a = MsgBox("Точно закрываем?", vbOKCancel)
If a <> 1 Then Exit Sub
 
On Error GoTo eq
 
If cu37 <> 0 Then gf (cu37)
Application.DisplayAlerts = False
Application.EnableEvents = False
 
On Error Resume Next
bh35.UsedRange.ClearContents
On Error GoTo 0
 
'For Each g In ActiveWorkbook.Sheets 'F1008 отменено, так как относилось к устаревшей модели создания\заполннения контекстных листов.
  'If InStr(1, g.Name, "Контекст") <> 0 Or g.Name = "Экран" Then 'F1008 заменено на проверку признака листа контекста case\
  'If g.Cells(1, 1) = "Контекст" And g.Name <> "Копикон" Then 'F1008 отменено
    'g1 = g.Name
    'g.UsedRange.EntireRow.Delete
    'g.Range("j8:j8").RowHeight = 150
    'g.Activate
    'ActiveWindow.SplitRow = 2
    'ActiveWindow.FreezePanes = True
    'If g.Name <> "Экран" Then g.Visible = False
    'For Each a In g.Shapes
    '    c = a.Name
    '    c1 = a.Type
    '    If c = "Menu" Then
    '      a.Delete
    '      End If
    '    Next
    'End If
 ' Next
'On Error GoTo 0
 
Application.DisplayAlerts = False
For Each g In ActiveWorkbook.Sheets
  If g.Cells(1, 1) = "Контекст" And g.Name <> "Копикон" Then g.Delete
  Next
Application.DisplayAlerts = True
On Error GoTo 0
 
eq:
 
On Error Resume Next

В самом начале процедуры вы задали On Error GoTo eq (в случае ошибки переход к метеке eq) и тут же через пару строк вы ставите пропуск ошибок On Error Resume Next
Далее ещё интереснее, вы через строку обнуляете все ошибки On Error GoTo 0 И таких обнулений уйма далее в коде. И такого хаоса если присмотрется к сожелению полно.
Вопрос: Так когда и при каких обстоятельствах код перепрыгнет к метке eq и таких меток у вас в вашем файле полно?
Правильно, Никогда!
Цитата Сообщение от Сфалерит Посмотреть сообщение
По крайней мере, за много лет
Скорее за 3 года, ну +- годик (могу ошибатся)...
Цитата Сообщение от Сфалерит Посмотреть сообщение
сложенный десятилетиями работы стиль программирования
Он виден в вашем файле из прошлой темы, тут спорить не буду .
Цитата Сообщение от Сфалерит Посмотреть сообщение
могу себе позволить отказ от подобного опционала
Хозяин "барин".
Цитата Сообщение от Сфалерит Посмотреть сообщение
И наверное критика была бы уместной от людей
Ну тут вы не правы, тема же общая, для общего обозрения. Вы же для этого и создали ваши 2 последнии темы чтоб вас похвалили или обоср... Или нет?
И да,
Цитата Сообщение от markiza-inc Посмотреть сообщение
Скорее это дизлайк, нежели высокая оценка.
100% согласен с markiza-inc, думаю что такого мнения не только я один тут. Дерзайте
Цитата Сообщение от markiza-inc Посмотреть сообщение
Это точно говорит о неоходимости обновить знания VBA и Excel
3
 Аватар для markiza-inc
930 / 257 / 100
Регистрация: 21.10.2012
Сообщений: 621
08.07.2025, 20:07
Цитата Сообщение от Сфалерит Посмотреть сообщение
А у Вас сколько на два мегабайта кода выходит?
У меня и гораздо больше чем 2 Мб файлы бывают, и довольно много, и таких "глобалок" по ошибкам не было ни разу. Потому что знаю что пишу.
Цитата Сообщение от Сфалерит Посмотреть сообщение
процесс отладки и появление Бэтта - версий - нечто закономерное, но Вы об этом не знали (1), и думаете, что раз программист написал код, то значит с первого же его запуска он больше не потребует правок (2), а если потребует, значит программист плохо знал язык или среду программирования. Увы, ваших взглядов не разделяю (3)
  1. Я знаю что такое процесс отладки
  2. Если программист хороший, то проги работают с первого запуска нормально, или с очень мелкими недочетами, но без глобальных глюков. Хороший программист отличается от плохого тем, что знает какие команды и в какой последовательности писать. Плохой лепит все подряд, потом разгребает проблемы.
  3. Можете не разделять моих и других взглядов, но вышесказанное - это факт.



Цитата Сообщение от Сфалерит Посмотреть сообщение
Сообщение от markiza-inc
Лучше и не скажешь!
Цитата Сообщение от Сфалерит Посмотреть сообщение
Это точно. Предупреждение о том, что файл содержит макросы (1) и предупреждение о том, что его рекомендуется открывать только для чтения (2) - для некоторых людей сложная куча, которую лучше не открывать
  1. Хрен его знает, что там содержат Ваши макросы, может VBE, которое испортит мне мои настройки. Или программное подключение каких-либо надстроек, которые мне не нужны, или будут конфликтовать с моими !
  2. Открыть файл только для чтения !!! Вы серьёзно??? А может как раз это и ограничивает Ваш функционал !!!
Цитата Сообщение от Сфалерит Посмотреть сообщение
И Выше на это уже был ответ о том, что все это сделано и получен рабочий файл новый
Где??? Где Вами что-то сделано?
Цитата Сообщение от markiza-inc Посмотреть сообщение
А решение Вашей проблемы уже было предложено выше. Чуть подробнее об этом:
  1. Экстрактировать все формы, модули и классы (если они есть).
  2. Сохранить файл только с листами.
  3. Проверить все эти выделенные файлы на ошибки, и исправить их.
  4. Загрузить снова в файл все экстрактированные и исправленные формы, модули и классы (если они есть)
.
Выполнить 1 и 2 пункты, упаковать и выставить сюда, чтобы можно было просто посмотреть исходники не запуская их у себя в Excel.
Цитата Сообщение от Сфалерит Посмотреть сообщение
Только вот такое решение - это скорее не решение, а способ обойти так и не решенную проблему.
А решением будет удалить подобные объекты, а не убежать от них.
Это и есть один из вариантов решения, но Вы это не хотите понять и принять.
Цитата Сообщение от Сфалерит Посмотреть сообщение
Но я с уважением отношусь к вашему решению обсуждать меня и мой проект в ситуации, когда с решением поставленного в теме вопроса Вы ни чем помочь не можете (1). Ведь если бы не было моего проекта, то не было бы и вопроса, на который Вы не смогли дать ответ. Уверен, что Вам было бы легче это незнание "что же делать в аналогичных случаях?" пережить (2)
  1. Могу, но не хочу. Потому что Вы спрашиваете так, как если бы прикатить в автосервис убитую тачку и сказать чтобы Вам ее починили за так, а Вы ее потом поедете продавать.
  2. Смог, и дал Вам умный совет. Ведь форум помогать в конкретных проблемах, отвечая на конкретные вопросы. А у Вас нет конкретных вопросов.

I can классный спец. Он сказал что запуск с кучей проблем, и я ему верю.
Вам дали советы где смотреть и как это делать, а Вы реагируете неправильно. MikeVol тоже дал хорошие советы, смотрите в этих направлениях. Когда много операторов On Error GoTo, запутаться проще всего.
3
Эксперт MS Access
 Аватар для Eugene-LS
13270 / 5947 / 1529
Регистрация: 05.10.2016
Сообщений: 16,651
08.07.2025, 20:25
Цитата Сообщение от markiza-inc Посмотреть сообщение
Хороший программист отличается от плохого тем, что знает какие команды и в какой последовательности писать.
Замечено:
Корявость и несуразность кода - прямо пропорциональна убеждению его автора в своей непогрешимости и даже гениальности ...

Часто можно наблюдать как подобные авторы начинают с защиты своей "нетленки" от копирования, еще до отладки основного интерфейса ...
0
08.07.2025, 20:38

Не по теме:

Эх. о-о-очень плохой получился рекламный ход продукта.

0
1412 / 876 / 93
Регистрация: 08.02.2017
Сообщений: 3,728
Записей в блоге: 2
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  [ТС]
Цитата Сообщение от MikeVol Посмотреть сообщение
Не было б причин вы бы не создавали тему с заголовком
Допустите, что причины создания темы никак не связаны теми, которые решились здесь активно перетирать.

Добавлено через 6 минут
Цитата Сообщение от MikeVol Посмотреть сообщение
В самом начале процедуры вы задали On Error GoTo eq (в случае ошибки переход к метеке eq) и тут же через пару строк вы ставите пропуск ошибок On Error Resume Next
Недостаток понимания иногда приводит к идее о том, что у окружающих нет логики.
Блоки On-Error имеют вложенную структуру. Вы в курсе? Предполагаю, что - нет. От того и не понимаете причины появления resume после goto.
В целом нужно было, чтобы все не отловленные ошибки, которые я не предсказывал и не предполагал их существования, пересылались на eq
А локально ошибка resume next обводит известную и предсказуемую ошибку, которая даже не ошибка, а один из вариантов состояния данных и алгоритм ниже resume next учитывает его возможное присутствие и отрабатывает именно его. resume next - защищает всего одну строку кода! И назначением ее является не обработка ошибки, а обратное - избегание перехода к обработке ошибок. Возникнет или не возникнет error в данном месте - зависит от данных и в общем виде не явлется ошибкой, поэтому, в данном случае оправдано не уходить на eq, что и сделано путем заключения этой строки кода в on error resume next, защищающий исполнение программы от не нужного ветвлелния на eq.
Т.е. там, где Вы не видите логики, вы ее просто не видите. Но она вполне себе заложена и отрабатывает, как и полагается.
Поэтому, прежде чем спешить критиковать чужой код, рекомендую вникать в него и думать.

Добавлено через 6 минут
Цитата Сообщение от MikeVol Посмотреть сообщение
Вопрос: Так когда и при каких обстоятельствах код перепрыгнет к метке eq и таких меток у вас в вашем файле полно?
Правильно, Никогда!
Цитата Сообщение от С
Правильно, недостаток понимания кода ведет к возникновению подобных вопросов.
Зона действия On error goto eq отлавливает ошибки одних строк кода. On error resume next - других. Соответственно, обработка разных ошибок производится по разному и разным кодом.
Мне жаль, что столь простые вещи Вам не понятны и мне приходится пояснять это.

Добавлено через 6 минут
Цитата Сообщение от MikeVol Посмотреть сообщение
Скорее за 3 года, ну +- годик (могу ошибатся)...
У файла, вызвавшего ваш ажиотаж есть версии. В названии файла, который я выкладывал, она присутствует!
АО8 RF B15 377 Логпрог означает:
АО8 - БД (Тема), в рамках которой создан и контролируется файл.
RF - аббревиатура, обозначающая, что это электронный файл.
B - количество символов, которым кодируется номер файла в теме. (А - 1, B-2 C-3 и так далее. Нужно для того, чтобы при сортировке по названию файлы ложились по-порядку в каталоге, а не 10 рядом со 100.)
15 - порядковый номер файла в списке зафиксированных в теме файлов.
377 - номер версии файла.
Логпрог - стандартная текстовая часть имени файла.
Все стоящее перед именем система генерирует сама. Причем именно этот же файл сам себя и переименовывает от версии к версии.
У меня есть все 377 версий файла. Но есть еще не менее трехсот более ранних, которые делались до перехода на xlsm файлы и формат которых был xls.
Так что сомнения ваши - часть вашей ментальности.

Добавлено через 3 минуты
Цитата Сообщение от MikeVol Посмотреть сообщение
Ну тут вы не правы, тема же общая, для общего обозрения. Вы же для этого и создали ваши 2 последнии темы чтоб вас похвалили или обоср... Или нет?
И да,
Или у кого что болит, тот о том и говорит. Ваша ментальность ко мне разве имеет отношение? Зачем ее пытаться примерять на меня?

Добавлено через 1 минуту
Цитата Сообщение от markiza-inc Посмотреть сообщение
У меня и гораздо больше чем 2 Мб файлы бывают,
Файлы или код VBA, написанный Вами?

Добавлено через 1 минуту
Цитата Сообщение от markiza-inc Посмотреть сообщение
Если программист хороший, то проги работают с первого запуска нормально, или с очень мелкими недочетами, но без глобальных глюков.
Т.е., Windows написан плохими программистами? И обновления с исправлениями регулярно идут, потому что плохие криворукие программисты создавали изначальный код с ошибками?

Добавлено через 4 минуты
Цитата Сообщение от markiza-inc Посмотреть сообщение
Хрен его знает, что там содержат Ваши макросы, может VBE, которое испортит мне мои настройки. Или программное подключение каких-либо надстроек, которые мне не нужны, или будут конфликтовать с моими !
Открыть файл только для чтения !!! Вы серьёзно??? А может как раз это и ограничивает Ваш функционал !!!
А открыть файл без запуска кода мама не велит? Или не умеем, а от того боимся?
Мой функционал ограничивает только ваша фантазия. Стабильные версии я открываю для чтения. Версии, находящиеся под наблюдением работы нового кода открываю с возможностью править. Все правки я делаю во время основной работы программы. У меня нет времени заниматься отдельно процессом отладки. Есть рабочие базы данных - магазин функционирующий в том числе. Ежедневно программа работает по разным направлениям и "на горячую" правится, если возникает какой-то новый, до селе не возникавший сбой.

Добавлено через 1 минуту
Цитата Сообщение от markiza-inc Посмотреть сообщение
Где??? Где Вами что-то сделано?
Учитесь читать, прежде чем активно выступать.
Не могу изменить значение константы. Excel падает

Добавлено через 1 минуту
Цитата Сообщение от markiza-inc Посмотреть сообщение
А у Вас нет конкретных вопросов.
Ваше право не видеть конкретики в вопросе в заголовке темы. Уважаю право быть не похожим ни на кого.

Добавлено через 1 минуту
Цитата Сообщение от markiza-inc Посмотреть сообщение
Он сказал что запуск с кучей проблем, и я ему верю.
Как бы - да. Главное верить. И лучше при этом не открывать глаза. Страусы тоже так делают... наверное.


Добавлено через 6 минут
Цитата Сообщение от testuser2 Посмотреть сообщение
По сабжу несколько ссылок из Яндекса
https://www.planetaexcel.ru/fo... &TID=45168
Чистка книг Excel
была еще одна куда-то потерялась уже, там упоминался некий Code Cleaner
Благодарю. Гляну к ночи.
0
Одесса - Украина
 Аватар для MikeVol
530 / 207 / 71
Регистрация: 01.04.2020
Сообщений: 629
09.07.2025, 11:20
Сфалерит, Ну-ну, вам виднее... Продолжайте далее лепить оператор On Error а бы куда. Я бы даже посоветовал бы его лепить хоть через строку.
И это как я уже выше писал - всего лишь что бросилось сразу в глаза. Далее я не стал смотреть в вашей портянке, страшно стало, о-о-очень. Удачи вам в кодинге, есть вам куда ещё расти.
0
 Аватар для KoGG
5730 / 1633 / 419
Регистрация: 23.12.2010
Сообщений: 2,455
Записей в блоге: 1
09.07.2025, 11:38
Сам код обычно не перегружает книгу, перегружают объекты.
Вот несколько макросов для очистки книг от разного мусора:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Sub DeleteAllShapes()
    Dim oL, Sh
    For Each Sh In ActiveWorkbook.Sheets
        For Each oL In Sh.Shapes
            oL.Delete
        Next
    Next Sh
End Sub
 
Sub РазорватьСвязи()
    Dim El, aLinks
    aLinks = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
    If Not IsEmpty(aLinks) Then
        For Each El In aLinks
            ActiveWorkbook.BreakLink Name:=El, Type:=xlLinkTypeExcelLinks
        Next El
    End If
End Sub
 
Sub DeleteAllNames()
    Dim N
    With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        On Error Resume Next
        For Each N In ActiveWorkbook.Names
            ''Debug.Print n.Name
            If Right(N.Name, 12) = "Print_Titles" Then
            ElseIf Right(N.Name, 10) = "Print_Area" Then
            Else
                N.Delete
            End If
        Next N
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With
End Sub
 
Sub Удалить_усл_форм_проверки()
' Удаляет условное форматирование, проверку данных на всех листах книги.
    Dim Sh, N
    With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With
    On Local Error Resume Next
    For Each Sh In ActiveWorkbook.Sheets
        Sh.Cells.FormatConditions.Delete
        Sh.Cells.Validation.Delete
    Next
End Sub
Немного в защиту Сфалерита: лично ему так удобнее. Хороший стиль программирования у кого-то складывается, у кого - нет. Для личного потребления и использования в узком кругу сойдет и так. Стиль именования переменных лично для меня - по смыслу (и без обязательных префиксов), а не какие-то дикие коды.
Большие программы со временем проходят эволюцию, обычно к улучшению. Но иногда накапливается и мусор - у меня это не удаленные вовремя объявления неиспользуемых переменных.
И конечно лучше все разбивать на модули по смыслу.
1
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
09.07.2025, 11:57  [ТС]
Благодарю. Но сей макрос, как вижу, не решает проблемы, обозначенной в теме.
Листы чистить нет нужды, потому что при подключении БД они автоматом генерируются Логпрогом и на них заливается запрошенная пользователем информация из подключенных БД. После того, как пользователь с этой информацией отработал, листы удаляются программым кодом. Поэтому, накопления лишних данных на листах не происходит.
Ссылки на другие книги я вообще не пользую. Подход иной. Есть программа обработчик баз данных. (БД). Она же - Логпрог. Есть сами файлы баз данных. Одно живет отдельно от другого. Разные файлы с разной организацией. Файлы БД не имеют никакого кода и никакого форматирования. Только упорядоченно организованные наборы данных. На старте создания БД собрана в единый файл с несколькими листами данных. По мере заполнения листов и появления критического для одного файла объема информации, файл БД отдельными процеурами дробится на несколько и БД превращается в распределенную. Объем хранения информации в ней фактически не ограничен, так как есть давно отлаженные механизмы дробления базы на сегменты. Соответственно, при запросе данных просто подгружаются нужные файлы БД и после окончания работы они выгружаются. Вместо ссылок используется прямой программный доступ к данным из подгруженных файлов. База прекрасно работает с таблицами, длина которых превосходит ограничение на число строк в рабочем листе Эксель. Отдельные таблицы, связанные с анализом прайс-листов поставщиков у меня содержат по нескольку сотен тысяч записей и все это вполне себе не подает признаков приближения к пределу возможностей программы. Сколько нужно, столько и кушает и затем выдает на гора по мере необходимости пользователя.
На счет названий переменных... там их десятки тысяч. У меня фантазии не хватит каждой придумывать не повторяющееся имя. У меня давно сложилась практика в объявлении переменной писать максимально подробно ее назначение. Ибо имя как не напиши, все равно оно как правило малоинформативно оказывается. А вот когда имена все начаты с префикса процедуры, в которой они объявлены и просто по порядку пронумерованы, то тут просто тупо делится экран редактора на два окна горизонтальным разделителем. вверху зона описания переменных. Нижнее окно - код, с которым работаешь. В итоге в коде Все кратко, лаконично и четко. А перед глазами в верхней части подробный мануал, что зачем и почему.
0
 Аватар для KoGG
5730 / 1633 / 419
Регистрация: 23.12.2010
Сообщений: 2,455
Записей в блоге: 1
09.07.2025, 12:26
Можно ли из файла Excel сделать 1С ?
Можно.
Но нужно ли?
1
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
1412 / 876 / 93
Регистрация: 08.02.2017
Сообщений: 3,728
Записей в блоге: 2
09.07.2025, 13:49
Цитата Сообщение от Сфалерит Посмотреть сообщение
иногда (в результате сбоев в работе и остановки исполнения кода по ошибке) не могут быть так же -программно- и своевременно удалены из книги и остаются в виде не нужных "хвостов".
Удаление листов в коде это вообще-то глючная процедура. При удалении листа происходит "потеря состояния" глобальные переменные обнуляются. Не понятное обнуление глобальных переменных
Если удаление листов происходит где-то в середине кода, лушче перенести это в конец, или делать отложенное удаление, с помощью Application.OnTime в отдельной процедуре.
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4088 / 2469 / 514
Регистрация: 13.12.2016
Сообщений: 8,397
Записей в блоге: 5
09.07.2025, 14:51
Цитата Сообщение от Eugene-LS Посмотреть сообщение
С заранее сохранённого образа системы
Для таких целей рекjмендую Zalman zm-ve350. Сотни образов под рукой с возможностью выбора с чего грузить.
0
 Аватар для markiza-inc
930 / 257 / 100
Регистрация: 21.10.2012
Сообщений: 621
09.07.2025, 14:55
Цитата Сообщение от Сфалерит Посмотреть сообщение
Файлы или код VBA, написанный Вами?
Ну, а кем же еще, конечно, я пишу только про свои работы.
Цитата Сообщение от Сфалерит Посмотреть сообщение
Т.е., Windows написан плохими программистами? И обновления с исправлениями регулярно идут, потому что плохие криворукие программисты создавали изначальный код с ошибками?
Да, отчасти так и есть. У хороших программистов были бы только обновления, но не было бы патчей (заплаток). Но у Microsoft пробем много не только с программистами. То наберут тестировщиков, то сократят, то еще какая хрень в головах руководства созреет ... Так еще и некоторые программисты считают себя "Богами" или кем-то еще, вспомните про "пасхальные яица", про умышленное ограничение в 32 Гб при форматировании дисков в FAT32 из-под Windows, и т.д. Да и коллектив программеров очень большой, у каждого свои амбиции, тараканы и прочее.
Цитата Сообщение от Сфалерит Посмотреть сообщение
А открыть файл без запуска кода мама не велит? Или не умеем, а от того боимся?
Все умеем и ничего не боимся, просто не хотим! Причины описаны выше. Но Вам этого пока не понять, амбиции поглощают логику.
Цитата Сообщение от Сфалерит Посмотреть сообщение
Мой функционал ограничивает только ваша фантазия
Ваш функционал ограничивает Ваша чрезмерная самоуверенность и не очень хорошие навыки программиста. И еще этим:
Цитата Сообщение от Сфалерит Посмотреть сообщение
У меня нет времени заниматься отдельно процессом отладки
Ответ на это очень простой и прописан в правилах ворума:
Цитата Сообщение от Сфалерит Посмотреть сообщение
Учитесь читать, прежде чем активно выступать
Читать умеем!!! А Вам надо перечитать правила форума и понять: все вопросы этой темы только в этой теме. И прыгать по Вашим другим темам из этой нафиг никому не нужно!
Цитата Сообщение от Сфалерит Посмотреть сообщение
Ваше право не видеть конкретики в вопросе в заголовке темы
Вижу:
Цитата Сообщение от Сфалерит Посмотреть сообщение
Как избавиться от таких объектов?
В чем конкретика? Это равно такому: Чуваки, я тут налепил горбатого, сам нихрена не понимаю что происходит, не могу разобраться, разберитесь за меня в коде, который я 25 лет переделываю и переделать не могу. Тем более: У меня нет времени заниматься отдельно процессом отладки. А у вас его, типа, навалом ...
Цитата Сообщение от Сфалерит Посмотреть сообщение
Страусы тоже так делают... наверное
Ну, Вам видней! Вы же не хотите понять что Вам советуют и на что указывают, проще сунуть голову в свой несовершенный код и пилить, пилить, пилить, и пилить его годами без оглядки на здравый смысл.

testuser2 дал хороший ответ в пост.№ 34. Но, обратите ли Вы на него внимание, тем более об этом и раньше Вам писали, только без ссылок.
0
1412 / 876 / 93
Регистрация: 08.02.2017
Сообщений: 3,728
Записей в блоге: 2
09.07.2025, 15:32
Цитата Сообщение от testuser2 Посмотреть сообщение
делать отложенное удаление, с помощью Application.OnTime в отдельной процедуре.
Вот, кстати вопрос на stackoverflow, где один чувак дает такой же совет. Еще один совет там, делать активацию листа перед удалением.
Visual Basic
1
2
            ws.Activate
            ws.Delete
Добавлено через 8 минут
Насчет удаления сбойных листов из проекта, тоже чего-то пишут на стаке https://stackoverflow.com/ques... eet-in-vba
0
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
09.07.2025, 17:01  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
Если удаление листов происходит где-то в середине кода, лушче перенести это в конец, или делать отложенное удаление, с помощью Application.OnTime в отдельной процедуре.
Само по себе удаление глюков ни разу не вызывало. Причины ошибок всегда крылись в чем-то ином. Явные глюки возникают в основном всегда при отладке, если ставишь условие на изменение какой-то переменной. Вот тут начинается свистопляска. Я давно уже избегаю остановок кода по условию на значение переменной. Глючит чаще всего на этом.
Работа с пользователя с создаваемыми листами ведется по принципу стека. Последний создан - первым будет удален. Соответственно, удалять приходится в середине работы. Но... конечно, удаление можно и отложить, сразу не удаляя, а лишь скрывая. Но в том сложности тоже. Дело в том, что созданных листов за сеанс работы можно наплодить кучу, которая приведет к перегрузу оперативной памяти, которую занимает файл. Поэтому, все же удалять придется в процессе работы, а не отложено. Но еще раз подчеркну, что разбор полетов за много лет показал, что все глюки, с которыми сталкивался, были вызваны отнюдь не с программным удалением листов, а как раз с тем, что до исполнения кода удаления не дотянуло и процесс выполнения программы оборвался ранее.

Добавлено через 2 минуты
Цитата Сообщение от markiza-inc Посмотреть сообщение
Ну, а кем же еще, конечно, я пишу только про свои работы.
Цитата Сообщение от Сфалерит Посмотреть сообщение
Вы не поняли вопрос. Я не спрашивал, кем написано, я спрашивал, что написано? У Вас в ваших файлах два мегабайта вашего кода или общий вес фала с данными - два мегабайта?

Добавлено через 4 минуты
Цитата Сообщение от markiza-inc Посмотреть сообщение
В чем конкретика? Это равно такому: Чуваки, я тут налепил горбатого, сам нихрена не понимаю что происходит, не могу разобраться, разберитесь за меня в коде, который я 25 лет переделываю и переделать не могу. Тем более: У меня нет времени заниматься отдельно процессом отладки. А у вас его, типа, навалом ...
Конкретика в том, что описан тип объекта, и описано, как этот тип объекта получен. Приведен пример файла, в котором такие объекты присутствуют в качестве образца того, о чем идет речь. Вопрос совершенно конкретен: Как такие объекты удалять из файла, в котором они находятся! Конкретнее некуда. Но мне вполне понятна причина, по которой Вы не хотите принимать эту конкретику. Ведь решения вопроса у Вас нет и близко. И как их убирать Вы тоже не знаете. Потому и шума столько с попыткой переключиться на иные вопросы, раз по данному сказать нечего.
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4088 / 2469 / 514
Регистрация: 13.12.2016
Сообщений: 8,397
Записей в блоге: 5
09.07.2025, 17:02
Цитата Сообщение от Сфалерит Посмотреть сообщение
Дело в том, что созданных листов за сеанс работы можно наплодить кучу
Скажу одно: Красивые самолеты красиво летают Только это кто-то уже до меня говорил...
1
55 / 55 / 1
Регистрация: 01.08.2019
Сообщений: 159
09.07.2025, 17:07  [ТС]
Как летают мои самолеты - мне вполне нравится. Ибо за час работы я порой могу сгенерировать по 20-30 разных форм и таблиц, совершенно разноплановых. Нужно посмотреть контактные данные - табличка выходит. Нужно глянуть детали по конкрентому лицу - снова табличка. И так бесконечно табличка за табличкой. Каждая из них сгенерирована на своем отдельном листе. Они могут сосуществовать одновременно. Но не нужные закрываются с удалением листа. Это нормальный процесс работы в моей программе. Все время генерируются новые листы и все время удаляются те, с которых нужная информация прочитана.
Программа не предлагает статичный набор таблиц. Это динамика! Таблицы генерируются заново из БД одна за другой. Разные. Разноплановые и с разным объемом выборки.
Т.е. я не работаю с таблицами баз даных напрямую. Прямого доступа к ним нет. Я работаю с копиями информации и мой обработчик Логпрог сливает в БД правки, которые я произвел по команде сохранения изменений. После сохранения изменений рабочий лист с копией попавших в рабочую выборку записей тупо удаляется.
Так сделано ради защиты данных от случайной потери или искажения. Можно спокойно затереть весь рабочий лист. Но при этом вся информация спокойно и без перемен остается в базе данных и в любой момент можно сгенерировать опять затертый ранее нечаянно или умышленно лист данных.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.07.2025, 17:07

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
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. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru