На работе один из сотрудников выполняет дефектовку, и присылает девочкам в сметно-договорном отделе файл 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-х.
Поделиться ссылкой: