Форум пользователей Visio
http://visio.getbb.ru/

Эмбедированный Word
http://visio.getbb.ru/viewtopic.php?f=6&t=1208
Страница 1 из 1

Автор:  siimao [ 25 сен 2017, 18:14 ]
Заголовок сообщения:  Эмбедированный Word

Встречал редактирование эмбедированных visio объектов в Word документ.
Но нигде не встречал решение по редактированию внедренных word объектов в visio силами vba.
Подскажите, пожалуйста, как получить доступ к word объекту и его автоматическое редактирование с помощью vba.

Вложения:
.vsd [98 Кб]
Скачиваний: 116

Автор:  Tumanov [ 25 сен 2017, 19:08 ]
Заголовок сообщения:  Re: Эмбедированный Word

Да так же, как с любым объектом. Запускаете Watch Window и рассматриваете содержимое объекта.
Потом по аналогии пишете VBA.
Получается примерно так
Код:
Sub ttt()
    Dim shp As Visio.Shape
    Set shp = ActivePage.Shapes(1)
    Debug.Print shp.Object.Application.Name
    Debug.Print shp.Object.Application.Documents(1).Paragraphs(1).Range.Text
End Sub

Автор:  siimao [ 26 сен 2017, 14:27 ]
Заголовок сообщения:  Re: Эмбедированный Word

Ответ мне кажется профессиональным, но как его применить не могу понять :(
Tumanov писал(а):
Да так же, как с любым объектом. Запускаете Watch Window и рассматриваете содержимое объекта.

Запустить в редакторе могу, но как просмотреть содержимое?

Tumanov писал(а):
Потом по аналогии пишете VBA.

По аналогии чему?

Вставил ваш пример в редактор Excel. На строке "Set shp = ActivePage.Shapes(1)" появляется ошибка "ActiveX component can't create object"

Автор:  Tumanov [ 26 сен 2017, 14:37 ]
Заголовок сообщения:  Re: Эмбедированный Word

Ну так, Excel здесь совершенно ни при чем. У нас же форум по Visio :)
В первой строке выбирается первый шейп на странице Visio. Считается, что этот шейп содержит встроенный объект Word.
Вам нужен пример для Excel?

Автор:  Tumanov [ 26 сен 2017, 14:47 ]
Заголовок сообщения:  Re: Эмбедированный Word

Для Excel будет вот так
Код:
Sub ttt()
    Dim sht As Excel.Worksheet
    Set sht = Application.ActiveSheet
    Debug.Print sht.OLEObjects(1).Object.Paragraphs(1).Range.Text
End Sub


Set sht = Application.ActiveSheet - берем активный лист в Excel
sht.OLEObjects(1).Object - выбираем первый встроенный объект на этом листе. Подразумевается, что это объект Word.
.Paragraphs(1).Range.Text - выводим текст первого параграфа из этого объекта
------------
В References должна быть добавлена галочка на Microsoft Word ... Object Library

Вложения:
Prim.xlsm [24.65 Кб]
Скачиваний: 119

Автор:  Tumanov [ 26 сен 2017, 15:00 ]
Заголовок сообщения:  Re: Эмбедированный Word

Ой, конкретные же вопросы были...
Цитата:
Запустить в редакторе могу, но как просмотреть содержимое?

Не просто в редакторе, а в режиме отладки. Поставить точку останова и рассматривать в Watсh окне содержимое переменных (и объектов).
Цитата:
По аналогии чему?

Расссмотрели структуру объекта в окне отладки, потом строим аналогичную структуру обращения в VBA. Структура одна, а представления разные. В одном слечае объекты нарисованные, в другом - последовательность имен, написанная через точку. Вот это понималось под аналогией.

Автор:  siimao [ 26 сен 2017, 15:41 ]
Заголовок сообщения:  Re: Эмбедированный Word

Спасибо за отклик.
Файлик скачал.
У меня стоят галочки Microsoft Word/Excel/Office/Visio ... Object Library, но на команде Debug.Print sht..... выдает ошибку: Run-time error 1004: App-def or obj-def error

Вопрос мой относиться к Visio. В Visio вставлен word документ и есть необходимость из Excel достать этот word в файле visio и его отредактировать.

Автор:  Tumanov [ 26 сен 2017, 16:32 ]
Заголовок сообщения:  Re: Эмбедированный Word

Ну так это немножко посложнее...
Сначала (из Excel) нужно будет обычным образом создать Visio.Application и открыть в нем нужный документ (файл) Visio.
Потом по первому примеру уже в документе Visio найти нужный объект и лезть в него.
Причем в примере я просто сделал единственный шейп с объектом Word и лезу в него. Поэтому и пишу ActivePage.Shapes(1) - это значит первый шейп на активной странице.
Вам этот объект скорее всего придется искать (в каком шейпе он размещен). Возможно, придется перебирать все шейпы на странице, проверяя тип объекта. Ну это уже зависит от того, что имеется на вашем рисунке Visio.

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/