Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 24.04.2014, 18:33   #1
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
Репутация: 48
По умолчанию Вставка и редактирование рисунков в 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,051
Репутация: 819
По умолчанию

Может тут?

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
Репутация: 48
По умолчанию

Эти строки работают, рисунок вставляется.
Не могу изменить размеры
В первом и последнем коде не работают фрагменты
Код:

      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,801
Репутация: 716

icq: 194381182
skype: viter.alex
По умолчанию

Помнится мне, что у меня тоже не получалось. И я пересчитывал размер, если нужно было сохранить пропорции. Судя из объяснения на мсдн
Цитата:
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
Репутация: 48
По умолчанию

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

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

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

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

Добрый день. Подскажите пожалуйста как с помощью макроса не только вставить изображение из буфера, но и поменять ему обтекание на "перед текстом" и выставить определенные размеры. Часто приходится копировать картинки из интернета и вставлять в ворд. И каждый раз приходится все в ручную делать.
Макрорекордер дает записать только первое действие, вставку.
После работать не хочет. Запись включается, но с рисунком ничего сделать не могу.
Код:
Код:

Sub Макрос1()
'
'вставка из буфера
Selection.PasteAndFormat (wdPasteDefault) 'записано макрорекордером
End Sub

Zaolog вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос Word. Обработка рисунков Илан Microsoft Office Word 5 19.06.2018 16:31
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 20:12
Нумерация рисунков и таблиц в Word coolsolver Microsoft Office Word 1 18.09.2007 09:27


23:19.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru