Страницы: 1
RSS
Путем упрощения примера с ошибкой пришел к неожиданному открытию и не знаю как решить эту проблему, Бонус: способ как устроить ошибку "Разрушительный сбой" в абсолютно новом файле
 
Приветствую!

Скачайте пример, зайти в единственный модуль макроса VBA, переименуйте функцию ‘GetText_’ убрав нижнее подчеркивание в конце имени функции. Закройте файл сохранив изменения и при повторном открытии у вас возникнет «Разрушительный сбой», если работа макросов не подавлена.
Файл-пример можете создать сами, если думаете, что дело в специфичных особенностях примера, новый файл будет работать с тем же эффектом в виде разрушительного сбоя, для этого в новом файле сначала создайте таблицу, в единственной строке которой укажите формулу ‘=GetText()’, затем вставьте модуль vba и код функции GetText, закройте файл сохранив его как .xlsm

Тестировалось на  пакетах MS Office 2016 и 2019, 64-бит, на разных машинах.

Теперь вопрос. Разумеется, обнаружил этот способ не от хорошей жизни. Часто ломается файл, где в умной таблице есть формулы с UDF, не зная как решить проблему, я упрощал и упрощал пример ошибки до минимально работающего набора, который ее провоцирует и он перед вами. Я не могу отказаться от умной таблицы и от UDF и от файла .xlsm,  но вместе эти три сущности, кажется, не уживаются, что делать, сталкивался ли кто?
Изменено: Сергей Юрьевич - 05.06.2025 00:21:14
 
Сергей Юрьевич, добрый день.  
Цитата
написал:
у вас возникнет «Разрушительный сбой»,
Не воспроизвелось не с Вашим файлом не с новым. Win10 Pro + Офис 365
Изменено: Alex - 04.06.2025 13:54:41
 
Win11 Pro + Офис 365 (x64) - разрушительный сбой не воспроизвелся
П.С. Не очень хорошая привычка использовать в качестве названий функций, переменных и т.п. зарезервированные слова Ecxcel/VBA. GetText к таким относится. Используется, в частности, в объекте FSO при работе с буфером обмена
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
Win11 Pro + Офис 365 (x64) - разрушительный сбой не воспроизвелсяП.С. Не очень хорошая привычка использовать в качестве названий функций, переменных и т.п. зарезервированные слова Ecxcel/VBA. GetText к таким относится. Используется, в частности, в объекте FSO при работе с буфером обмена

В исходном файле проблему вызывает функция с совершенно другим названием и оно не из зарезирвированных слов, даже если api объекта FSO причислить к таковым. Выше я указал, что упрощал файл ошибки и доупрощался до того, что от старой функции нет ничего, даже ее имени, т.к. старое имя не продолжало нести смысла в виду сильных упрощений. Я думаю, причина не в этом, хотя замечание верное и я мог бы подобрать имя для примера более аккуратно не создавая двусмысленности и ассоциаций с системными утилитами. Вероятно, вы смогли бы убедиться в том, что дело вовсе не в текущем имени функции на более старой версии MS Office. Уже двое отписались что на 365 ошибки не возникает. Естественно, не понимая природы данной ошибки я был вынужден экперементировать не только с именами функций, но и именами и типами аргументов и типами возвращаемого результата. Уверяю вас, дело не в текущем имени функции, я перебрал достаточно имен, чтобы быть уверенным в этом.
Изменено: Сергей Юрьевич - 05.06.2025 00:46:00
 
Проделал операции, указанные в стартовом сообщении, на компьютере с Win 10, Excel 2016 (32).
Результат прилагается.
У меня файл открывается в обычном режиме.
Изменено: sokol92 - 04.06.2025 17:08:05
Владимир
 
sokol92, спасибо, за ваше участие. Я открыл ваш файл и проблема не возникла. Но сделать на основе этого файла разрушительный сбой удалось. Для этого я прямо в вашем файле переименовал функцию, стал в ячейку A2 и нажал enter для пересчета ячейки в локальную ошибку #ИМЯ?, после чего вернул старое имя функции и закрыл файл с сохранением изменений. При повторном открытии увидел "разрушительный сбой". Windows 10 Pro 64x разрядный, Excel-2019 (64 бит)
Изменено: Сергей Юрьевич - 04.06.2025 17:27:50
 
Спасибо за исследование!
Последовательность действий, описанная Вами, приводит к разрушению структуры проекта книги (\xl\vbaProject.bin), после этого файл уже не отремонтировать.

Я не знаю, как сообщить разработчикам о баге.
Владимир
 
Цитата
sokol92 написал:
Последовательность действий, описанная Вами, приводит к разрушению структуры проекта книги (\xl\vbaProject.bin), после этого файл уже не отремонтировать.

Есть ли у вас что добавить касательно файлов .xlsb? Остаются ли они островком безопасности, как кажутся на первый взгляд, для тех, кто хочет работать с UDF и умными таблицами или бинарный файл тоже деградирует, но по тихому? (Я в курсе, что в .xlsb не возникает разрушительного сбоя, но это совсем не означать, отсутсвие деградации структуры на уровне бинарного файла).

Самое неприятное в этой истории, что люди из моего коллектива нашли другой неизвестный путь к разрушительному сбою в новом файле и он исключает редактирование имени макроса в VBA модуле (они его не посещали, доверяя коду разработчика, но тем не менее заруинили файл через разрушительный сбой). Я пробовал добавлять строку в таблицу в эксель с подавленым макросом чтобы в новой строке было #ИМЯ? и открывать файл с включеным макросом, но это не вызывает проблем и на первый взгляд проходит гладко. Я бы успокоился, но я знаю, что есть какой-то более короткий способ и меня это беспокоит так как у меня в проде xlsm+таблица+udf и потенциально у нас в зоне риска много форумчан. Желательно формализовать проблему с ракурса как без посещая модуль VBA, люди, ничего не знающие про VBA тоже могут прийти к аналогичной проблеме путем прямой работы с таблицей. Я видел пару таких случаев на слабой машине, когда было открыто много эксель-файлов. Открытие моего файла сопровождалось разрушительным сбоем, пока небыло сокращено число открытых файлов на машине. Потенциально это второй способ руинить новый файл, но мне тяжело его воспроизвести и указать конкретные шаги как прийти к проблеме. Могу только добавить, что тот файле также представлял связку xlsm+таблица+udf.

Вероятно, я теперь хочу пересесть на xlsb, который видится мне более стабильным, но уверенности в этом нет и вероятно мне нужна помощь того, кто может справоцировать проблему в xlsm на своей машине (так как не у всех, судя по отзывам, она появляется) после чего повторить действие для xlsb и проверить пледовательность 0 и 1 бинарного файла на идентичность после повторного открытия файла в условиях, где xlsm выдавал разрушительный сбой. Я думаю, это единственный верный способо наделить xlsb титулом "островок безопасности", просто ориентироваться на сообщение о разрушительном сбое не столь надежно, т.е. xlsb мог бы маскировать проблему, но быть корумпированым ей.

p.s. Я не вижу для себя выхода в попытке связаться с разработчиками продукта Excel, так как в случае успеха, мой работодатель не сменит версию Excel в ближайшее время и мне нужно адаптироваться к существующей среде, а не ждать обновлений от MS. Кроме того, я не смогу зарегламентировать посещение публичного файла в сети и непускать в него пользователей эксель с неподходящей версией
Изменено: Сергей Юрьевич - 05.06.2025 01:44:05
 
2013, 2016, 2019  / 64 - ошибка не воспроизводится
 
nilske, возьмите файл sokol92 и проделайте действия, который я ему описал, у него не получалось, но следуя данным шагам он смог воспроизвести, вот:

Для этого я прямо в вашем файле переименовал функцию, стал в ячейку A2 и нажал enter для пересчета ячейки в локальную ошибку #ИМЯ?, после чего вернул старое имя функции и закрыл файл с сохранением изменений. При повторном открытии увидел "разрушительный сбой".

Переименовывать функцию нужно в модуле VBA, а не в ячейке.
Изменено: Сергей Юрьевич - 05.06.2025 13:23:16
 
Сергей Юрьевич, эти действия я совершал в том числе
единственное, когда происходит сбой - на excel 2019 после восстановления файла из корзины, однако он не разрушительный и позволяет продолжить работу с файлом. На других компах/версиях и этот сбой повторить не удалось
Windows 10

забыл указать про "продолжить работу с файлом" - ни одно имя не принимает, но это ведь не тот сбой, который описан в этой теме
Изменено: nilske - 05.06.2025 13:28:52
 
nilske,  попробуйте еще сделать так, пкм по файлу и в его свойствах разблокировать, вдруг у вас макросы блокируются для файлов из интернета. Я с трех компов вижу эту ошибку

Изменено: Сергей Юрьевич - 05.06.2025 13:29:22
 
Сергей Юрьевич, предусмотрел, делал. Ещё есть варианты?

P.S. Как хорошо, когда офисы лицензионные и со всеми обновлениями :)
Изменено: nilske - 05.06.2025 13:31:52
 
nilske,  мой Anydesk 405580734

Цитата
nilske написал:
P.S. Как хорошо, когда офисы лицензионные и со всеми обновлениями
хорошо будет пока файл не посетит другой человек, с другим набором обновлений, если причина действительно в этом)
Попробую обновиться, действительно.
Изменено: Сергей Юрьевич - 05.06.2025 14:00:38
 
С обновлением эксель до последней версии проблема не возникает, мой файл примера не работает на обновленном эксель
Страницы: 1
Читают тему
Наверх