Изменение размера большого числа картинок
Добрый день!
Пожалуйста, помогите со следующей задачей: есть документ на 1000 страниц, в котором около 400 рисунков. Большая часть рисунков вставлена с размерами порядка 35х25 см, и поэтому они вылазят за пределы полей листа А4. Как можно быстро установить ширину всех больших картинок на 18,5 см без ручного изменения ширины для каждой картинки?
|
Freux, картинки в Microsoft Word бывают разные ;).
Вставьте этот код:
Код:
Sub ScaleShapes()
Dim objInlineShape As InlineShape
For Each objInlineShape In ThisDocument.InlineShapes
With objInlineShape
If PointsToCentimeters(.Width) > 18.5 Then
.Width = CentimetersToPoints(18.5)
.ScaleHeight = .ScaleWidth
End If
End With
Next
End Sub
в VB проект данного документа, и исполните его. Рекомендую сначала попробовать на копии документа.
|
Спасибо, я попробовал, но возникает ошибка:
Может, я что-то не так сделал? Я просто открыл VB через "Разработчик" и там вставил текст, F5.
Цитата:
Цитата Iska
Freux, картинки в Microsoft Word бывают разные . »
|
Картинки имеются в виду не нарисованные средствами Office, а вставленные из jpg/png файлов.
|
Цитата:
Цитата Freux
Картинки имеются в виду не нарисованные средствами Office, а вставленные из jpg/png файлов. »
|
И такие тоже.
Цитата:
Цитата Freux
Спасибо, я попробовал, но возникает ошибка: »
|
читать дальше »
Достаточно нажать в этом окне «Ctrl-C» — текст заголовка, сообщения и кнопок будет помещён в буфер обмена:
Цитата:
Код:
---------------------------
Microsoft Visual Basic
---------------------------
Compile error:
Variable not defined
---------------------------
ОК Справка
---------------------------
|
В какой строке ошибка (приведите текст строки)?
|
Код:
---------------------------
Microsoft Visual Basic
---------------------------
Run-time error '5148':
Число должно быть между
---------------------------
OK Help
---------------------------
Насколько я понял, прогнав несколько циклов в debug, ошибка в строке
Код:
.ScaleHeight = .ScaleWidth
|
Гм. Если добавить перед этой строкой такой код:
Код:
Debug.Print .ScaleHeight
Debug.Print .ScaleWidth
Debug.Print "---"
и попробовать исполнить вновь — что будет написано в окне отладки?
|
Я так и не понял, куда он печатает переменные .ScaleHeight и .ScaleWidth, поэтому тупо посмотрел в пошаговом режиме, чему он равны. В цикле, когда возникает ошибка (а это первый же цикл, который удовлетворяет неравенству) .ScaleHeight = 0. Здесь же и ошибка видимо.
|
Цитата:
Цитата Freux
Я так и не понял, куда он печатает переменные .ScaleHeight и .ScaleWidth, »
|
У меня 2003-й Office, и там окно отладки «Immediate» можно увидеть, нажав Ctrl-G в окне редактора VBA или через меню — \View\Immediate Window.
Цитата:
Цитата Freux
В цикле, когда возникает ошибка (а это первый же цикл, который удовлетворяет неравенству) .ScaleHeight = 0. »
|
Сие, мягко говоря, странно. Давайте попробуем сделать так: Вы подготовите отдельный документ с парой-тройкой подобных вставленных рисунков, которые больше 18.5 см, и на которых заведомо возникает подобная ошибка при обработке данным кодом. Упакуете его в архив с паролем и выложите на какой-либо публичный обменник. Ссылку на архив и пароль к нему — мне в личку. Я попробую «пощупать» изображения «ручками».
|
Документ получил. Freux, возможно, Вы будете смеяться, но код из #2 отработал без каких-либо ошибок и, как и предполагалось, выставил размер изображений в заданные размеры с сохранением пропорций.
У Вас с выложенным документом с этими пятью изображениями на коде из #2 точно возникала указанная в #3 ошибка?
|
Да у меня ошибка возникает постоянно (что странно, тк логика в коде строгая), возможно я неправильно вставлял код? Я открывал из меню Visual Basic, и вставлял код в ThisDocument в структуре слева, затем исполнял его.
Вот так это выглядело:
Может, код применяется не к тем объектам по какой-либо причине? Расскажите, какой последовательностью действий исполняли код Вы.
|
Freux, я в этом деле нуб, но попробуйте заменить сантиметры на инчи (дюймы или в пиксели)
Ещё возможна ошибка в неправильном формате самого файла.
Переконвертируйте его и пробуйте с ним одним
|
Цитата:
Цитата Freux
…возможно я неправильно вставлял код? Я открывал из меню Visual Basic, и вставлял код в ThisDocument в структуре слева, затем исполнял его. »
|
Да, нет, я делал аналогично. И на выложенном Вами файле я действовал ровно таким же образом — вставлял код именно так, поверх уже вставленной Вами процедуры с аналогичным именем. Вот сейчас ещё раз проделал данную операцию над выложенным Вами документом — код отработал, все пять изображений смасштабировались по ширине до размера 18.49 см.
Быть может, в 2007-м Office так сильно сменилась объектная модель, что данный код не работает?
|
Время: 18:18.
© OSzone.net 2001-