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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2013, 21:53   #1
Илан
Новичок
Джуниор
 
Регистрация: 17.09.2013
Сообщений: 4
По умолчанию Макрос 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,837
По умолчанию

Вы смешали мух и котлеты. Если рисунок "за текстом", то он никак не может входить в коллекцию 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
По умолчанию

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,837
По умолчанию

Позволю себе прокомментировать ваш код:
Код:
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
По умолчанию

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

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

Цитата:
Сообщение от 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
Пробуйте. Что непонятно — спрашивайте.
Здравствуйте.
Нашёл очень полезным ваш переделанный код, но возник один вопрос, который не знаю, как решить.
Допустим, что в переменную надо записать не все рисунки в документе, а все рисунки в выделенном его фрагменте. Для этого вместо ActiveDocument.Shapes я пишу Selection.Shapes. Но в таком случае свойства внутри With применяются только к первому рисунку в выделении.
Можно ли изменить код так, чтобы они применялись ко всем рисункам в выделенном фрагменте документа?
LexxyBlaze вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
макрос в 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