Cжать рисунки средствами VBA

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Задача: сжать рисунки о офисном файле (в частности, в книге Excel) средствами VBA
(на панели Настройка изображения есть кнопочка Сжатие рисунков)

Проблема: макрорекордер ничего не пишет (ни в Office 2003, ни в 2007-м)
У объектов типа IPicture, IPictureDisp, Shape нет соотвествующих методов и свойств. (по крайней мере, найти мне не удалось)
Поиск ничего не дал - на других форумах видел пару аналогичных вопросов - но без ответов...

Скорее всего, функция оптимизации изображения находится в общей для всех офисных программ библиотеке
(либо в exe-файле программы Microsoft Office Picture Manager)
Знать, хотя бы, в какой библиотеке искать эту функцию...

Должно же быть возможно выполнить это действие средствами VBA.
SendKeys использовать не хочется...
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте EducatedFool.
Не достаточно ли простого изменения размера отображаемого рисунка, С такой задачей VBA справляется легко:

Код: Выделить всё

Sub resizePic()
    With ActiveSheet.Shapes("Picture 2")
        .LockAspectRatio = True 'False
        .Height = 400
        '.Width = 200
    End With
End Sub
Евгений.
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Здравствуйте, Евгений.

К сожалению, изменение размеров не поможет - рисунки уже имеют нужный размер.
Вот только глубина цвета у них 24 bit, да и разрешение высокое.

После вставки рисунков файл весит более 5 мегабайтов, а после сжатия размер файла значительно уменьшается (до 64 Кбайтов)

Видимо, эта встроенная функция урезает глубину цвета и разрешение изображения.
При этом визуально ухудшение качества изображения не наблюдается.

Вот и хотелось бы добиться такого эффекта не нажатием кнопок, а средствами VBA...

Игорь.
Ответить