Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вставка и редактирование рисунков в Word. VBA - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Вставка и редактирование рисунков в Word. VBA
RAN Дата: Четверг, 24.04.2014, 19:14 | Сообщение № 1
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Мяв!
Закину и сюда (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: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
Дата добавления - 25.04.2014 в 05:13
RAN Дата: Пятница, 25.04.2014, 10:55 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

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

Однако, похоже в файле Word глюк.
Тестовый работает, а основной без костыля не хочет.

Пример теста в архиве.

По поводу Selection подумаю.

Люди разные бывают. Я человеку исправил точку изменения отображения окна Word, а он в претензии - зачем в скрытом режиме сделал, желаю смотреть, как картинки в Word вставляются. lol
К сообщению приложен файл: Test.rar (78.7 Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПотестил.
Переменная помогла. Спасибо.

Однако, похоже в файле Word глюк.
Тестовый работает, а основной без костыля не хочет.

Пример теста в архиве.

По поводу Selection подумаю.

Люди разные бывают. Я человеку исправил точку изменения отображения окна Word, а он в претензии - зачем в скрытом режиме сделал, желаю смотреть, как картинки в Word вставляются. lol

Автор - 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
Дата добавления - 25.04.2014 в 11:07
RAN Дата: Пятница, 25.04.2014, 12:09 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Ошибки как таковой нет, код выполняется, просто игнорируется строка
[vba]
Код
pShape.LockAspectRatio = -1
[/vba]
Изменяется только один размер, тот, который укажешь.

А в примере все работает, изменяются оба размера.

Костыль в первом коде первого поста.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеОшибки как таковой нет, код выполняется, просто игнорируется строка
[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
Дата добавления - 25.04.2014 в 13:26
RAN Дата: Пятница, 25.04.2014, 21:10 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
LockAspectRatio = -1 блокирует изменение соотношения сторон.


Совершенно ай ай ай! Именно это и требуется. Но не работает. >(
Т.е. в примере работает, а в основном файле - нет.

PS
Чтобы совсем избежать разночтений
Берем картинку 50х50
Запускаем
[vba]
Код
.LockAspectRatio = -1
       .Width = 100
[/vba]

Должны получить картинку 100х100 (и получаем в тестовом файле)

А в рабочем получаем 100х50.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал 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
Дата добавления - 26.04.2014 в 06:26
RAN Дата: Суббота, 26.04.2014, 10:20 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Выложен тестовый. А основной(рабочий) - это док шаблон страниц на 40, в который нужно еще столько же вставить.
Он у меня дома остался.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВыложен тестовый. А основной(рабочий) - это док шаблон страниц на 40, в который нужно еще столько же вставить.
Он у меня дома остался.

Автор - RAN
Дата добавления - 26.04.2014 в 10:20
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!