Показать полную графическую версию : Изменение размера большого числа картинок
Добрый день!
Пожалуйста, помогите со следующей задачей: есть документ на 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 проект данного документа, и исполните его. Рекомендую сначала попробовать на копии документа.
Спасибо, я попробовал, но возникает ошибка:
http://s1.ipicture.ru/uploads/20111030/1kVnITH6.png
Может, я что-то не так сделал? Я просто открыл VB через "Разработчик" и там вставил текст, F5.
Freux, картинки в Microsoft Word бывают разные . »
Картинки имеются в виду не нарисованные средствами Office, а вставленные из jpg/png файлов.
Картинки имеются в виду не нарисованные средствами Office, а вставленные из jpg/png файлов. »
И такие тоже.
Спасибо, я попробовал, но возникает ошибка: »
Достаточно нажать в этом окне «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. Здесь же и ошибка видимо.
Я так и не понял, куда он печатает переменные .ScaleHeight и .ScaleWidth, »
У меня 2003-й Office, и там окно отладки «Immediate» можно увидеть, нажав Ctrl-G в окне редактора VBA или через меню — \View\Immediate Window.
В цикле, когда возникает ошибка (а это первый же цикл, который удовлетворяет неравенству) .ScaleHeight = 0.»
Сие, мягко говоря, странно. Давайте попробуем сделать так: Вы подготовите отдельный документ с парой-тройкой подобных вставленных рисунков, которые больше 18.5 см, и на которых заведомо возникает подобная ошибка при обработке данным кодом. Упакуете его в архив с паролем и выложите на какой-либо публичный обменник. Ссылку на архив и пароль к нему — мне в личку. Я попробую «пощупать» изображения «ручками».
Документ получил. Freux, возможно, Вы будете смеяться, но код из #2 (http://forum.oszone.net/post-1784986.html#post1784986) отработал без каких-либо ошибок и, как и предполагалось, выставил размер изображений в заданные размеры с сохранением пропорций.
У Вас с выложенным документом с этими пятью изображениями на коде из #2 (http://forum.oszone.net/post-1784986.html#post1784986) точно возникала указанная в #3 (http://forum.oszone.net/post-1785044.html#post1785044) ошибка?
Да у меня ошибка возникает постоянно (что странно, тк логика в коде строгая), возможно я неправильно вставлял код? Я открывал из меню Visual Basic, и вставлял код в ThisDocument в структуре слева, затем исполнял его.
Вот так это выглядело:
http://i31.fastpic.ru/thumb/2011/1105/d5/45ebdf4eea26b421ced84b86675973d5.jpeg (http://fastpic.ru/view/31/2011/1105/45ebdf4eea26b421ced84b86675973d5.png.html)
Может, код применяется не к тем объектам по какой-либо причине? Расскажите, какой последовательностью действий исполняли код Вы.
Freux, я в этом деле нуб, но попробуйте заменить сантиметры на инчи (дюймы или в пиксели)
Ещё возможна ошибка в неправильном формате самого файла.
Переконвертируйте его и пробуйте с ним одним
…возможно я неправильно вставлял код? Я открывал из меню Visual Basic, и вставлял код в ThisDocument в структуре слева, затем исполнял его. »
Да, нет, я делал аналогично. И на выложенном Вами файле я действовал ровно таким же образом — вставлял код именно так, поверх уже вставленной Вами процедуры с аналогичным именем. Вот сейчас ещё раз проделал данную операцию над выложенным Вами документом — код отработал, все пять изображений смасштабировались по ширине до размера 18.49 см.
Быть может, в 2007-м Office так сильно сменилась объектная модель, что данный код не работает?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2024, Jelsoft Enterprises Ltd.