PDA

Показать полную графическую версию : Изменение размера большого числа картинок


Freux
30-10-2011, 13:31
Добрый день!
Пожалуйста, помогите со следующей задачей: есть документ на 1000 страниц, в котором около 400 рисунков. Большая часть рисунков вставлена с размерами порядка 35х25 см, и поэтому они вылазят за пределы полей листа А4. Как можно быстро установить ширину всех больших картинок на 18,5 см без ручного изменения ширины для каждой картинки?

Iska
30-10-2011, 15:19
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 проект данного документа, и исполните его. Рекомендую сначала попробовать на копии документа.

Freux
30-10-2011, 16:24
Спасибо, я попробовал, но возникает ошибка:
http://s1.ipicture.ru/uploads/20111030/1kVnITH6.png

Может, я что-то не так сделал? Я просто открыл VB через "Разработчик" и там вставил текст, F5.
Freux, картинки в Microsoft Word бывают разные . »
Картинки имеются в виду не нарисованные средствами Office, а вставленные из jpg/png файлов.

Iska
31-10-2011, 00:22
Картинки имеются в виду не нарисованные средствами Office, а вставленные из jpg/png файлов. »
И такие тоже.
Спасибо, я попробовал, но возникает ошибка: »
Достаточно нажать в этом окне «Ctrl-C» — текст заголовка, сообщения и кнопок будет помещён в буфер обмена:
---------------------------
Microsoft Visual Basic
---------------------------
Compile error:

Variable not defined
---------------------------
ОК Справка
---------------------------

В какой строке ошибка (приведите текст строки)?

Freux
31-10-2011, 22:12
---------------------------
Microsoft Visual Basic
---------------------------
Run-time error '5148':

Число должно быть между 
---------------------------
OK Help
---------------------------
Насколько я понял, прогнав несколько циклов в debug, ошибка в строке
.ScaleHeight = .ScaleWidth

Iska
01-11-2011, 01:45
Гм. Если добавить перед этой строкой такой код:
Debug.Print .ScaleHeight
Debug.Print .ScaleWidth
Debug.Print "---"
и попробовать исполнить вновь — что будет написано в окне отладки?

Freux
01-11-2011, 17:57
Я так и не понял, куда он печатает переменные .ScaleHeight и .ScaleWidth, поэтому тупо посмотрел в пошаговом режиме, чему он равны. В цикле, когда возникает ошибка (а это первый же цикл, который удовлетворяет неравенству) .ScaleHeight = 0. Здесь же и ошибка видимо.

Iska
01-11-2011, 22:17
Я так и не понял, куда он печатает переменные .ScaleHeight и .ScaleWidth, »
У меня 2003-й Office, и там окно отладки «Immediate» можно увидеть, нажав Ctrl-G в окне редактора VBA или через меню — \View\Immediate Window.

В цикле, когда возникает ошибка (а это первый же цикл, который удовлетворяет неравенству) .ScaleHeight = 0.»
Сие, мягко говоря, странно. Давайте попробуем сделать так: Вы подготовите отдельный документ с парой-тройкой подобных вставленных рисунков, которые больше 18.5 см, и на которых заведомо возникает подобная ошибка при обработке данным кодом. Упакуете его в архив с паролем и выложите на какой-либо публичный обменник. Ссылку на архив и пароль к нему — мне в личку. Я попробую «пощупать» изображения «ручками».

Iska
02-11-2011, 03:43
Документ получил. 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) ошибка?

Freux
05-11-2011, 10:31
Да у меня ошибка возникает постоянно (что странно, тк логика в коде строгая), возможно я неправильно вставлял код? Я открывал из меню Visual Basic, и вставлял код в ThisDocument в структуре слева, затем исполнял его.
Вот так это выглядело:
http://i31.fastpic.ru/thumb/2011/1105/d5/45ebdf4eea26b421ced84b86675973d5.jpeg (http://fastpic.ru/view/31/2011/1105/45ebdf4eea26b421ced84b86675973d5.png.html)

Может, код применяется не к тем объектам по какой-либо причине? Расскажите, какой последовательностью действий исполняли код Вы.

yurfed
05-11-2011, 11:37
Freux, я в этом деле нуб, но попробуйте заменить сантиметры на инчи (дюймы или в пиксели)
Ещё возможна ошибка в неправильном формате самого файла.
Переконвертируйте его и пробуйте с ним одним

Iska
05-11-2011, 13:19
…возможно я неправильно вставлял код? Я открывал из меню Visual Basic, и вставлял код в ThisDocument в структуре слева, затем исполнял его. »
Да, нет, я делал аналогично. И на выложенном Вами файле я действовал ровно таким же образом — вставлял код именно так, поверх уже вставленной Вами процедуры с аналогичным именем. Вот сейчас ещё раз проделал данную операцию над выложенным Вами документом — код отработал, все пять изображений смасштабировались по ширине до размера 18.49 см.

Быть может, в 2007-м Office так сильно сменилась объектная модель, что данный код не работает?




© OSzone.net 2001-2012