На работе один из сотрудников выполняет дефектовку, и присылает девочкам в сметно-договорном отделе файл Excel с это дефектовкой. Зовут меня девочки как-то раз и показывают этот файл… Таблица на 1 лист формата А4, а весит — 50 мегабайт!!!
Файлы чуть меньшего размера им этот сотрудник слал и раньше, а в этот раз файл не пролез в почту, и сотрудник отправил его через облако, тут, как говорится, терпение и лопнуло.
Открыв файл я немного подофигел. Внутри в одном из столбцов практически в каждой ячейке помимо самого текста были вставлены и элементы формы — textbox.
И ничего бы страшного, но выделив один из этих элементов я увидел что его порядковый номер 3762… Теперь стало понятно откуда растут уши у размера файла. В этом файле были тысячи textbox. Вручную удалять весь этот срач — мартышкин труд. Поэтому я немного потеребил VBA и сообразил макрос.
Sub DeleteAllTextboxies() Dim i As Long With ActiveSheet.Shapes For i = .Count To 1 Step -1 If .Item(i).Type = msoTextBox Then .Item(i).Delete End If Next i End With End Sub
Создаем модуль, вставляем туда код, запускаем, ждем пока вс обработается, проверяем что все почистилось, удаляем модуль. На этом и всё 🙂 Не забываем сохранить почищенный файл.
ЗЫ — скрипты в MSO — зло. Так же как и формы. Ужасно-костыльное решение с приветом из 90-х.
Поделиться ссылкой: