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

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

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

Ответ
 
Опции темы
Старый 17.09.2013, 21:53   #1
Илан
Новичок
 
Регистрация: 17.09.2013
Сообщений: 4
Репутация: 10
По умолчанию Макрос Word. Обработка рисунков

Привет всем.Для обработки в ворде рисунка макросом (изменить ширину, обтекание и т.д) необходимо чтобы этот рисунок обладал свойством Shapes, для этого необходимо выполнить .InlineShapes(1).ConvertToShape. Рисунок в ворде, имеющий обтекание тестов «в тексте», имеет свойство InlineShapes(1) и после конвертации никаких проблем нет, его можно обрабатывать макросом. Но когда тот же рисунок имеет обтекание текстом «за текстом», то при использовании InlineShapes(1) пишет, что номер такого семейства не существует (ошибка 5941) и ничего с ним не сделать. Вопрос в следующем, есть ли семейство InlineShapes для данного типа рисунков, или как-нибудь другим способом избавиться от этой проблемы.
Илан вне форума   Ответить с цитированием
Старый 18.09.2013, 03:09   #2
viter.alex
Балуюсь кодами
Профессионал
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Адрес: Харків, Україна
Сообщений: 1,801
Репутация: 716

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

Вы смешали мух и котлеты. Если рисунок "за текстом", то он никак не может входить в коллекцию InlineShapes, он находится в коллекции ShapeRange.
У вас, как мне кажется, неправильное представление о том, что такое InlineShapes и Shapes.
InlineShapes — это коллекция содержащая все рисунки, имеющие обтекание "в тексте". (InlineShapes можно перевести как "фигуры, вписанные в строку"). Например, Selection.InlineShapes содержит все рисунки с обтеканием "в тексте", находящиеся в выделенном фрагменте.
Shapes содержит рисунки, у которых обтекание не "в тексте".

Приложите документ и опишите подробнее, что у вас не получается
__________________
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 18.09.2013 в 03:11.
viter.alex вне форума   Ответить с цитированием
Старый 18.09.2013, 18:02   #3
Илан
Новичок
 
Регистрация: 17.09.2013
Сообщений: 4
Репутация: 10
По умолчанию

Dim selPic As Object
Set selPic = ActiveDocument.InlineShapes(1)
selPic.Select
With Selection
.InlineShapes(1).ConvertToShape
.ShapeRange.WrapFormat.Type = 3
Selection.ShapeRange.ZOrder 5
Selection.ShapeRange.IncrementLeft MillimetersToPoints(30)
End With

вот собственно часть кода программы, которым я обрабатывал рисунке "в тексте", все получалось. После мне надо для тех же рисунков применить другое обтекание. Я видел, что inlineshapes используется для рисунков в тектсе и предположил что по сути нужно поменять в двух местах: Set selPic = ActiveDocument.Shapes и удалить InlineShapes(1).ConvertToShape, так как уже является shape.

Dim selPic As Object
Set selPic = ActiveDocument.Shapes
selPic.Select
With Selection
.ShapeRange.WrapFormat.Type = 3
Selection.ShapeRange.ZOrder 4
Selection.ShapeRange.IncrementLeft MillimetersToPoints(30)
End With

Но для полученного кода выдаётся ошибка, что не объект не поддерживает этот метод. Где я ошибся?
Илан вне форума   Ответить с цитированием
Старый 18.09.2013, 23:58   #4
viter.alex
Балуюсь кодами
Профессионал
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Адрес: Харків, Україна
Сообщений: 1,801
Репутация: 716

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

Позволю себе прокомментировать ваш код:
Код:

Dim selPic As Object
'Эта строка присваивает переменной selPic первый рисунок из документа
'И только первый. Как вы обрабатывали все рисунки? Этот код был в цикле?
'Ну ладно. Работает — не трогай!
Set selPic = ActiveDocument.InlineShapes(1)
selPic.Select 'Выбрать рисунок
'Затем работаем с выделением
With Selection
	'Вытягиваем рисунок из текста
	.InlineShapes(1).ConvertToShape
	'Меняем обтеканием
	.ShapeRange.WrapFormat.Type = 3
	'Перемещаем за текст
	.ShapeRange.ZOrder 5
	'Смещаем на 30 мм вправо
	.ShapeRange.IncrementLeft MillimetersToPoints(30)
End With

Больших огрехов здесь нет. Теперь переделанный код:
Код:

Dim selPic As Object
'В переменную selPic записываем все рисунки документа, находящиеся не в тексте.
'Все, а не один рисунок как в случае с InlineShape.
Set selPic = ActiveDocument.Shapes
'Пытаемся выбрать то, что находится в переменной selPic.
'Но тут и возникает ошибка. Потому что метода Select для коллекции Shapes
'не существует. Есть метод SelectAll
selPic.Select
'Дальше всё должно работать
With Selection.ShapeRange
	.WrapFormat.Type = 3
	.ZOrder 4
	.IncrementLeft MillimetersToPoints(30)
End With

Пробуйте. Что непонятно — спрашивайте.
__________________
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума   Ответить с цитированием
Старый 19.09.2013, 17:11   #5
Илан
Новичок
 
Регистрация: 17.09.2013
Сообщений: 4
Репутация: 10
По умолчанию

Всё, заработало Спасибо большое, очень выручили
Илан вне форума   Ответить с цитированием
Старый 19.06.2018, 16:31   #6
Zaolog
Новичок
 
Регистрация: 24.12.2017
Сообщений: 2
Репутация: 10
По умолчанию

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

Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
макрос в word meg8639 Microsoft Office Excel 6 01.10.2011 17:37
Макрос в MO Word auqarius Помощь студентам 0 11.04.2011 22:50
Сохранение рисунков Word в файл viter.alex Microsoft Office Word 5 08.06.2010 21:43
Нумерация рисунков и таблиц в Word coolsolver Microsoft Office Word 1 18.09.2007 09:27
Макрос в Word Mictiann Microsoft Office Word 1 12.09.2007 09:35


17:52.


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

RusProfile.ru


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