Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   Изменение размера большого числа картинок (http://forum.oszone.net/showthread.php?t=219272)

Freux 30-10-2011 13:31 1784880

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

Iska 30-10-2011 15:19 1784986

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 1785044

Спасибо, я попробовал, но возникает ошибка:


Может, я что-то не так сделал? Я просто открыл VB через "Разработчик" и там вставил текст, F5.
Цитата:

Цитата Iska
Freux, картинки в Microsoft Word бывают разные . »

Картинки имеются в виду не нарисованные средствами Office, а вставленные из jpg/png файлов.

Iska 31-10-2011 00:22 1785377

Цитата:

Цитата Freux
Картинки имеются в виду не нарисованные средствами Office, а вставленные из jpg/png файлов. »

И такие тоже.
Цитата:

Цитата Freux
Спасибо, я попробовал, но возникает ошибка: »

читать дальше »
Достаточно нажать в этом окне «Ctrl-C» — текст заголовка, сообщения и кнопок будет помещён в буфер обмена:
Цитата:

Код:

---------------------------
Microsoft Visual Basic
---------------------------
Compile error:

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



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

Freux 31-10-2011 22:12 1786076

Код:

---------------------------
Microsoft Visual Basic
---------------------------
Run-time error '5148':

Число должно быть между 
---------------------------
OK  Help 
---------------------------

Насколько я понял, прогнав несколько циклов в debug, ошибка в строке
Код:

                .ScaleHeight = .ScaleWidth

Iska 01-11-2011 01:45 1786189

Гм. Если добавить перед этой строкой такой код:
Код:

Debug.Print .ScaleHeight
Debug.Print .ScaleWidth
Debug.Print "---"

и попробовать исполнить вновь — что будет написано в окне отладки?

Freux 01-11-2011 17:57 1786643

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

Iska 01-11-2011 22:17 1786809

Цитата:

Цитата Freux
Я так и не понял, куда он печатает переменные .ScaleHeight и .ScaleWidth, »

У меня 2003-й Office, и там окно отладки «Immediate» можно увидеть, нажав Ctrl-G в окне редактора VBA или через меню — \View\Immediate Window.

Цитата:

Цитата Freux
В цикле, когда возникает ошибка (а это первый же цикл, который удовлетворяет неравенству) .ScaleHeight = 0.»

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

Iska 02-11-2011 03:43 1786950

Документ получил. Freux, возможно, Вы будете смеяться, но код из #2 отработал без каких-либо ошибок и, как и предполагалось, выставил размер изображений в заданные размеры с сохранением пропорций.

У Вас с выложенным документом с этими пятью изображениями на коде из #2 точно возникала указанная в #3 ошибка?

Freux 05-11-2011 10:31 1788964

Да у меня ошибка возникает постоянно (что странно, тк логика в коде строгая), возможно я неправильно вставлял код? Я открывал из меню Visual Basic, и вставлял код в ThisDocument в структуре слева, затем исполнял его.
Вот так это выглядело:


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

yurfed 05-11-2011 11:37 1788984

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

Iska 05-11-2011 13:19 1789045

Цитата:

Цитата Freux
…возможно я неправильно вставлял код? Я открывал из меню Visual Basic, и вставлял код в ThisDocument в структуре слева, затем исполнял его. »

Да, нет, я делал аналогично. И на выложенном Вами файле я действовал ровно таким же образом — вставлял код именно так, поверх уже вставленной Вами процедуры с аналогичным именем. Вот сейчас ещё раз проделал данную операцию над выложенным Вами документом — код отработал, все пять изображений смасштабировались по ширине до размера 18.49 см.

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


Время: 18:18.

Время: 18:18.
© OSzone.net 2001-