Вставка и редактирование рисунков в Word. VBA
RAN
Дата: Четверг, 24.04.2014, 19:14 |
Сообщение № 1
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Мяв! Закину и сюда (http://programmersforum.ru/showthread.php?t=259385) Другой день бодаюсь со вставкой рисунков в Word. В исходном файле пытаюся вставить рисунок в таблицу с 1 ячейкой содержащей закладку и установить его размеры. [vba]Код
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
[/vba] Без костыля меняется только либо высота, либо ширина. При этом ошибки нет Сегодня создал шаблон с таблицей в 1 ячейку, написал код для вставки [vba]Код
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
[/vba] Все работает. Аналогичным кодом вставляю рисунок на лист, но вылетаю с ошибкой при изменении размера. [vba]Код
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
[/vba] Подскажите, где собака порылась? И как правильно? Обработка идет из Excel.
Мяв! Закину и сюда (http://programmersforum.ru/showthread.php?t=259385) Другой день бодаюсь со вставкой рисунков в Word. В исходном файле пытаюся вставить рисунок в таблицу с 1 ячейкой содержащей закладку и установить его размеры. [vba]Код
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
[/vba] Без костыля меняется только либо высота, либо ширина. При этом ошибки нет Сегодня создал шаблон с таблицей в 1 ячейку, написал код для вставки [vba]Код
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
[/vba] Все работает. Аналогичным кодом вставляю рисунок на лист, но вылетаю с ошибкой при изменении размера. [vba]Код
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
[/vba] Подскажите, где собака порылась? И как правильно? Обработка идет из Excel. RAN
Быть или не быть, вот в чем загвоздка!
Сообщение отредактировал RAN - Четверг, 24.04.2014, 19:16
Ответить
Сообщение Мяв! Закину и сюда (http://programmersforum.ru/showthread.php?t=259385) Другой день бодаюсь со вставкой рисунков в Word. В исходном файле пытаюся вставить рисунок в таблицу с 1 ячейкой содержащей закладку и установить его размеры. [vba]Код
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
[/vba] Без костыля меняется только либо высота, либо ширина. При этом ошибки нет Сегодня создал шаблон с таблицей в 1 ячейку, написал код для вставки [vba]Код
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
[/vba] Все работает. Аналогичным кодом вставляю рисунок на лист, но вылетаю с ошибкой при изменении размера. [vba]Код
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
[/vba] Подскажите, где собака порылась? И как правильно? Обработка идет из Excel. Автор - RAN Дата добавления - 24.04.2014 в 19:14
anvg
Дата: Пятница, 25.04.2014, 05:13 |
Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация:
271
±
Замечаний:
0% ±
2016, 365
Добрый день Андрей В коде в самом Word размер меняет произвольно, думаю, что из Excel будет работать. Или я чего-то не понял в вопросе? [vba]Код
Public Sub test() Dim pMarker As Bookmark, pShape As InlineShape Set pMarker = ThisDocument.Bookmarks("marker") Set pShape = pMarker.Range.InlineShapes.AddPicture("c:\Temp\2\3.jpg", False, True) pShape.LockAspectRatio = msoFalse pShape.Height = 142 pShape.Width = 142 End Sub
[/vba] Успехов. P. S. Подобно как и в Excel зачем мучать Selection?
Добрый день Андрей В коде в самом Word размер меняет произвольно, думаю, что из Excel будет работать. Или я чего-то не понял в вопросе? [vba]Код
Public Sub test() Dim pMarker As Bookmark, pShape As InlineShape Set pMarker = ThisDocument.Bookmarks("marker") Set pShape = pMarker.Range.InlineShapes.AddPicture("c:\Temp\2\3.jpg", False, True) pShape.LockAspectRatio = msoFalse pShape.Height = 142 pShape.Width = 142 End Sub
[/vba] Успехов. P. S. Подобно как и в Excel зачем мучать Selection? anvg
Ответить
Сообщение Добрый день Андрей В коде в самом Word размер меняет произвольно, думаю, что из Excel будет работать. Или я чего-то не понял в вопросе? [vba]Код
Public Sub test() Dim pMarker As Bookmark, pShape As InlineShape Set pMarker = ThisDocument.Bookmarks("marker") Set pShape = pMarker.Range.InlineShapes.AddPicture("c:\Temp\2\3.jpg", False, True) pShape.LockAspectRatio = msoFalse pShape.Height = 142 pShape.Width = 142 End Sub
[/vba] Успехов. P. S. Подобно как и в Excel зачем мучать Selection? Автор - anvg Дата добавления - 25.04.2014 в 05:13
RAN
Дата: Пятница, 25.04.2014, 10:55 |
Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Потестил. Переменная помогла. Спасибо. Однако, похоже в файле Word глюк. Тестовый работает, а основной без костыля не хочет. Пример теста в архиве. По поводу Selection подумаю. Люди разные бывают. Я человеку исправил точку изменения отображения окна Word, а он в претензии - зачем в скрытом режиме сделал, желаю смотреть, как картинки в Word вставляются.
Потестил. Переменная помогла. Спасибо. Однако, похоже в файле Word глюк. Тестовый работает, а основной без костыля не хочет. Пример теста в архиве. По поводу Selection подумаю. Люди разные бывают. Я человеку исправил точку изменения отображения окна Word, а он в претензии - зачем в скрытом режиме сделал, желаю смотреть, как картинки в Word вставляются. RAN
К сообщению приложен файл:
Test.rar
(78.7 Kb)
Быть или не быть, вот в чем загвоздка!
Ответить
Сообщение Потестил. Переменная помогла. Спасибо. Однако, похоже в файле Word глюк. Тестовый работает, а основной без костыля не хочет. Пример теста в архиве. По поводу Selection подумаю. Люди разные бывают. Я человеку исправил точку изменения отображения окна Word, а он в претензии - зачем в скрытом режиме сделал, желаю смотреть, как картинки в Word вставляются. Автор - RAN Дата добавления - 25.04.2014 в 10:55
anvg
Дата: Пятница, 25.04.2014, 11:07 |
Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация:
271
±
Замечаний:
0% ±
2016, 365
Странно, у меня Word 2010 32bit выполнилось без проблем. А где должна была быть ошибка?
Странно, у меня Word 2010 32bit выполнилось без проблем. А где должна была быть ошибка? anvg
Ответить
Сообщение Странно, у меня Word 2010 32bit выполнилось без проблем. А где должна была быть ошибка? Автор - anvg Дата добавления - 25.04.2014 в 11:07
RAN
Дата: Пятница, 25.04.2014, 12:09 |
Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Ошибки как таковой нет, код выполняется, просто игнорируется строка [vba]Код
pShape.LockAspectRatio = -1
[/vba] Изменяется только один размер, тот, который укажешь. А в примере все работает, изменяются оба размера. Костыль в первом коде первого поста.
Ошибки как таковой нет, код выполняется, просто игнорируется строка [vba]Код
pShape.LockAspectRatio = -1
[/vba] Изменяется только один размер, тот, который укажешь. А в примере все работает, изменяются оба размера. Костыль в первом коде первого поста. RAN
Быть или не быть, вот в чем загвоздка!
Ответить
Сообщение Ошибки как таковой нет, код выполняется, просто игнорируется строка [vba]Код
pShape.LockAspectRatio = -1
[/vba] Изменяется только один размер, тот, который укажешь. А в примере все работает, изменяются оба размера. Костыль в первом коде первого поста. Автор - RAN Дата добавления - 25.04.2014 в 12:09
anvg
Дата: Пятница, 25.04.2014, 13:26 |
Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация:
271
±
Замечаний:
0% ±
2016, 365
LockAspectRatio = -1 блокирует изменение соотношения сторон. Изменив один размер, в силу этого, изменится и второй так, чтобы сохранить это отношение. В моём же примере LockAspectRatio = msoFalse, то есть размеры можно менять произвольно
LockAspectRatio = -1 блокирует изменение соотношения сторон. Изменив один размер, в силу этого, изменится и второй так, чтобы сохранить это отношение. В моём же примере LockAspectRatio = msoFalse, то есть размеры можно менять произвольно anvg
Ответить
Сообщение LockAspectRatio = -1 блокирует изменение соотношения сторон. Изменив один размер, в силу этого, изменится и второй так, чтобы сохранить это отношение. В моём же примере LockAspectRatio = msoFalse, то есть размеры можно менять произвольно Автор - anvg Дата добавления - 25.04.2014 в 13:26
RAN
Дата: Пятница, 25.04.2014, 21:10 |
Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
LockAspectRatio = -1 блокирует изменение соотношения сторон.
Совершенно ай ай ай! Именно это и требуется. Но не работает. Т.е. в примере работает, а в основном файле - нет. PS Чтобы совсем избежать разночтений Берем картинку 50х50 Запускаем [vba]Код
.LockAspectRatio = -1 .Width = 100
[/vba] Должны получить картинку 100х100 (и получаем в тестовом файле) А в рабочем получаем 100х50.
LockAspectRatio = -1 блокирует изменение соотношения сторон.
Совершенно ай ай ай! Именно это и требуется. Но не работает. Т.е. в примере работает, а в основном файле - нет. PS Чтобы совсем избежать разночтений Берем картинку 50х50 Запускаем [vba]Код
.LockAspectRatio = -1 .Width = 100
[/vba] Должны получить картинку 100х100 (и получаем в тестовом файле) А в рабочем получаем 100х50.RAN
Быть или не быть, вот в чем загвоздка!
Сообщение отредактировал RAN - Пятница, 25.04.2014, 22:50
Ответить
Сообщение LockAspectRatio = -1 блокирует изменение соотношения сторон.
Совершенно ай ай ай! Именно это и требуется. Но не работает. Т.е. в примере работает, а в основном файле - нет. PS Чтобы совсем избежать разночтений Берем картинку 50х50 Запускаем [vba]Код
.LockAspectRatio = -1 .Width = 100
[/vba] Должны получить картинку 100х100 (и получаем в тестовом файле) А в рабочем получаем 100х50.Автор - RAN Дата добавления - 25.04.2014 в 21:10
anvg
Дата: Суббота, 26.04.2014, 06:26 |
Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация:
271
±
Замечаний:
0% ±
2016, 365
Странно, у меня в выложенном основном все коты получились "квадратные", как и положено. Word 2010 32bit.
Странно, у меня в выложенном основном все коты получились "квадратные", как и положено. Word 2010 32bit. anvg
Ответить
Сообщение Странно, у меня в выложенном основном все коты получились "квадратные", как и положено. Word 2010 32bit. Автор - anvg Дата добавления - 26.04.2014 в 06:26
RAN
Дата: Суббота, 26.04.2014, 10:20 |
Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Выложен тестовый. А основной(рабочий) - это док шаблон страниц на 40, в который нужно еще столько же вставить. Он у меня дома остался.
Выложен тестовый. А основной(рабочий) - это док шаблон страниц на 40, в который нужно еще столько же вставить. Он у меня дома остался. RAN
Быть или не быть, вот в чем загвоздка!
Ответить
Сообщение Выложен тестовый. А основной(рабочий) - это док шаблон страниц на 40, в который нужно еще столько же вставить. Он у меня дома остался. Автор - RAN Дата добавления - 26.04.2014 в 10:20