Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2014, 18:33   #1
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию Вставка и редактирование рисунков в Word. VBA.

Приветствую.
Другой день бодаюсь со вставкой рисунков в Word.

В исходном файле пытаюся вставить рисунок в таблицу с 1 ячейкой содержащей закладку и установить его размеры.
Код:
        wd.Bookmarks.Item(marker).Select
        wa.Selection.InlineShapes.AddPicture Filename:=basep & aan, LinkToFile:= _
                                             False, SaveWithDocument:=True
        wa.Selection.Tables(1).Select
        With wa.Selection.InlineShapes(1)    'Если Формат - Рисунок - Положение "в тексте"
'            Heght = .Height: wigt = .Width    ' костыль
            .LockAspectRatio = -1    'msoTrue    'Формат - Риснок - Размер - Сохранять пропорции
                        .Height = 141.88    'Высота рисунка 227 = 8 см
'            .Height = 100 '360 ': .Width = .Height * (wigt / Heght)    ' костыль
        End With
Без костыля меняется только либо высота, либо ширина. При этом ошибки нет
Сегодня создал шаблон с таблицей в 1 ячейку, написал код для вставки
Код:
            For Each x In coll
                .Selection.InsertRowsBelow 1
                .Selection.TypeText Text:="Фото № " & x(1) & " " & x(2)
                .Selection.EndKey Unit:=5, Extend:=1    ' 5   1
                .Selection.ParagraphFormat.KeepWithNext = True
                .Selection.InsertRowsBelow 1
                .Selection.ParagraphFormat.KeepWithNext = False
                .Selection.InlineShapes.AddPicture Filename:=x(3), LinkToFile:= _
                                                   False, SaveWithDocument:=True
                wa.Selection.EndKey Unit:=5, Extend:=1    ' 5   1
                With wa.Selection.InlineShapes(1)    'Если Формат - Рисунок - Положение "в тексте"
                    .LockAspectRatio = -1    ' msoTrue    'Формат - Риснок - Размер - Сохранять пропорции
                    .Width = 100 '454    'Ширина рисунка
                End With
            Next
Все работает.

Аналогичным кодом вставляю рисунок на лист, но вылетаю с ошибкой.
Код:
marker = "ana1"
            wd.Bookmarks.Item(marker).Select
            wa.Selection.InlineShapes.AddPicture Filename:=iFulleName, LinkToFile:= _
                                                 False, SaveWithDocument:=True
            With wa.Selection.InlineShapes(1)    'Если Формат - Рисунок - Положение "в тексте"
                .LockAspectRatio = -1    ' msoTrue    'Формат - Риснок - Размер - Сохранять пропорции
                .Width = 400    'Высота рисунка 227 = 8 см
            End With
Подскажите, где собака порылась? И как правильно?

Обработка идет из Excel.
RAN. вне форума Ответить с цитированием
Старый 24.04.2014, 23:00   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Может тут?

wd.Bookmarks.Item(marker).Select
wa.Selection.InlineShapes.AddPicture
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 24.04.2014, 23:08   #3
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию

Эти строки работают, рисунок вставляется.
Не могу изменить размеры
В первом и последнем коде не работают фрагменты
Код:
      With wa.Selection.InlineShapes(1)    'Если Формат - Рисунок - Положение "в тексте"
          .LockAspectRatio = -1    ' msoTrue    'Формат - Риснок - Размер - Сохранять пропорции
           .Width = 400    'Высота рисунка 227 = 8 см
       End With
В первом случае игнорируется строка
Код:
.LockAspectRatio = -1
в третьем ошибка на строке
Код:
With wa.Selection.InlineShapes(1)
Усомнился, и еще рад проверил
При смене wa и wd получаю объект не поддерживает свойство или метод.
Код:
        Set wa = CreateObject("Word.Application")
        Set wd = wa.Documents.Add(ThisWorkbook.Path & "\" & "шаблон фото.docx")

Последний раз редактировалось RAN.; 25.04.2014 в 00:24.
RAN. вне форума Ответить с цитированием
Старый 25.04.2014, 00:49   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Помнится мне, что у меня тоже не получалось. И я пересчитывал размер, если нужно было сохранить пропорции. Судя из объяснения на мсдн
Цитата:
True if the specified shape retains its original proportions when you resize it. False if you can change the height and width of the shape independently of one another when you resize it. Read/write MsoTriState.
Этот параметр не реагирует на программное изменение ширины или высоты, хотя не совсем ясно, что они понимают под resize.
Для удобства, помести картинку в переменную:
Код:
Dim InShp As InlineShape
Set InShp = wa.Selection.InlineShapes.AddPicture Filename:=basep & aan, LinkToFile:= False, SaveWithDocument:=True
Этим мы ты избавишься от необходимости выделять таблицу, для того, чтобы из выделения получить вставленную картинку.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 25.04.2014, 01:02   #5
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию

Идея интересная. Поковыряю.
Не ясно, почему при вставке через закладку не работает (1), а при вставке в таблицу напрямую (2) - работает.
И как достучаться до рисунка, вставленного помимо таблицы?

PS Пересчитывать размер - костыль в коде 1.
RAN. вне форума Ответить с цитированием
Старый 25.04.2014, 10:49   #6
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию

Потестил.
Переменная помогла. Спасибо.

Однако, похоже в файле Word глюк.
Тестовый работает, а основной без костыля не хочет.
RAN. вне форума Ответить с цитированием
Старый 20.06.2018, 10:34   #7
Zaolog
Новичок
Джуниор
 
Регистрация: 24.12.2017
Сообщений: 2
По умолчанию

Добрый день. Подскажите пожалуйста как с помощью макроса не только вставить изображение из буфера, но и поменять ему обтекание на "перед текстом" и выставить определенные размеры. Часто приходится копировать картинки из интернета и вставлять в ворд. И каждый раз приходится все в ручную делать.
Макрорекордер дает записать только первое действие, вставку.
После работать не хочет. Запись включается, но с рисунком ничего сделать не могу.
Код:
Код:
Sub Макрос1()
'
'вставка из буфера
Selection.PasteAndFormat (wdPasteDefault) 'записано макрорекордером
End Sub
Zaolog вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос Word. Обработка рисунков Илан Microsoft Office Word 6 09.01.2019 04:53
VBA WORD При наборе текста, автоматическая вставка изображения fearnewstyle Microsoft Office Word 1 13.11.2011 08:05
Сохранение рисунков Word в файл viter.alex Microsoft Office Word 5 08.06.2010 21:43
Сжатие рисунков средствами VBA EducatedFool Microsoft Office Excel 1 17.01.2009 19:12
Нумерация рисунков и таблиц в Word coolsolver Microsoft Office Word 1 18.09.2007 09:27