Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 25 янв 2021, 22:18

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !
Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 13:54 
Не в сети

Зарегистрирован: 17 дек 2019, 13:26
Сообщений: 13
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Добрый день, столкнулся со следующей проблемой:
Есть вордовский файл содержащий текст и несколько рисунков в формате визио. Мне надо внести изменения во все рисунки по одному шаблону.
План такой: макросом пройти по всем рисункам циклом «For i = 1 To ActiveDocument.InlineShapes.Count» при этом открывая каждый рисунок из ворда и внося необходимые изменения из ворда в визио и затем закрывать рисунок. Проблема в открытии в ворде рисунка визио. Какой командой это можно делать?
Заранее спасибо


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 14:41 
Не в сети
Глав-тролль

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 4078
Откуда: оттуда
Использую Visio c: 1998
Уровнь квалификации: Отсутствует
Антон писал(а):
Добрый день, столкнулся со следующей проблемой:
Есть вордовский файл содержащий текст и несколько рисунков в формате визио. Мне надо внести изменения во все рисунки по одному шаблону.
План такой: макросом пройти по всем рисункам циклом «For i = 1 To ActiveDocument.InlineShapes.Count» при этом открывая каждый рисунок из ворда и внося необходимые изменения из ворда в визио и затем закрывать рисунок. Проблема в открытии в ворде рисунка визио. Какой командой это можно делать?
Заранее спасибо

Была близкая тема
viewtopic.php?f=6&t=1208


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 15:36 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1751
Очков репутации: 100619

Добавить очки репутацииУменьшить очки репутации
Можно попробовать вот так
Код:
Sub ttt()
    Set o = ActiveDocument.InlineShapes(1).OLEFormat.Object
    Debug.Print o.Name
    Debug.Print o.Pages(1).Name
End Sub

На выходе получаем
Код:
Drawing in G:\Temp\пример.docx.vsd
Page-1


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 15:42 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1751
Очков репутации: 100619

Добавить очки репутацииУменьшить очки репутации
Цитата:
Проблема в открытии в ворде рисунка визио.

А вот что-то я засомневался...
Что делать-то нужно: встроенный объект программно подредактировать или активировать Visio для ручного редактирования?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 15:59 
Не в сети

Зарегистрирован: 17 дек 2019, 13:26
Сообщений: 13
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Необходимо встроенный объект программно подредактировать


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 16:00 
Не в сети
Глав-тролль

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 4078
Откуда: оттуда
Использую Visio c: 1998
Уровнь квалификации: Отсутствует
этот код активирует внедренный оле-объект визио и нарисует в нем линию
Код:
Dim myobj As Object
For i = 1 To ThisDocument.InlineShapes.Count
With ThisDocument.InlineShapes(i).OLEFormat
.Activate
Set myobj = .Object
myobj.Pages(1).DrawLine 1, 1, 0, 1
End With


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 16:31 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1751
Очков репутации: 100619

Добавить очки репутацииУменьшить очки репутации
Активировать неверное не обязательно.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 17:10 
Не в сети

Зарегистрирован: 17 дек 2019, 13:26
Сообщений: 13
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Surrogate, добавил в конце "Next" т.к. цикл был не закрыт. При запуске ничего не происходит (никаких ошибок и открытия рисунка не наблюдаю).


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 17:13 
Не в сети

Зарегистрирован: 17 дек 2019, 13:26
Сообщений: 13
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Можно попробовать вот так
Код:
Sub ttt()
    Set o = ActiveDocument.InlineShapes(1).OLEFormat.Object
    Debug.Print o.Name
    Debug.Print o.Pages(1).Name
End Sub

На выходе получаем
Код:
Drawing in G:\Temp\пример.docx.vsd
Page-1


выдает ошибку:
Metod 'Object' of object 'OLEFormat' failed


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 17:17 
Не в сети

Зарегистрирован: 17 дек 2019, 13:26
Сообщений: 13
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Можно попробовать вот так
Код:
Sub ttt()
    Set o = ActiveDocument.InlineShapes(1).OLEFormat.Object
    Debug.Print o.Name
    Debug.Print o.Pages(1).Name
End Sub

На выходе получаем
Код:
Drawing in G:\Temp\пример.docx.vsd
Page-1


Я так понимаю что это и есть вариант без активации, но не понимаю что тут происходит. Не могли бы вы рассказать. Спасибо за помощь.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 17:34 
Не в сети

Зарегистрирован: 17 дек 2019, 13:26
Сообщений: 13
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
я представлял себе код примерно таким:
Код:
Sub Ìàêðîñ3()
Dim x As String
Dim www As Object
Set www = GetObject(, "Visio.Application")

For i = 1 To ActiveDocument.InlineShapes.Count
With ActiveDocument.InlineShapes(i).OLEFormat
'.ActivateAs ClassType:="Visio.Page"
.Activate
'x = www.ActivePage.Shapes(j).Text
End With
Next

End Sub


при этом открывает в подокошке (как если нажать двойной щелчок) но не позволяет менять что-то или получать что-то (закоментированое "x = http://www.ActivePage.Shapes(j).Text") т.к. вылезает ошибка. Но я думаю надо открыть не в окошке а как страницу Visio и там получится работать. Может использовать "ActivateAs ClassType:="Visio.Page"? Но здесь какая-то ошибка в записи.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 18:17 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1751
Очков репутации: 100619

Добавить очки репутацииУменьшить очки репутации
Цитата:
Я так понимаю что это и есть вариант без активации, но не понимаю что тут происходит. Не могли бы вы рассказать.

Достаем встроенный объект из первого Inline шейпа в вордовском документе.
Код:
Set o = ActiveDocument.InlineShapes(1).OLEFormat.Object

Если это картинка Visio, то полученный объект будет документом Visio.
Теперь выводим в окно Immediate имя документа
Код:
Debug.Print o.Name

Выводим имя первой страницы
Код:
Debug.Print o.Pages(1).Name

Собственно, основное здесь - получить ссылку на документ, то есть .InlineShapes(1).OLEFormat.Object а дальше обычная работа с объектной моделью Visio.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 18:41 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1751
Очков репутации: 100619

Добавить очки репутацииУменьшить очки репутации
Проверил. Без активации не получается.
Прилагаю работающий пример и демонстрашку


Вложения:
InLine.gif
InLine.gif [ 145.82 Кб | Просмотров: 299 ]
test.docm [35.37 Кб]
Скачиваний: 19
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 18:49 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1751
Очков репутации: 100619

Добавить очки репутацииУменьшить очки репутации
Текст практически такой же, как у Surrogate
Код:
Sub ttt()
    For i = 1 To ActiveDocument.InlineShapes.Count
        ActiveDocument.InlineShapes(i).OLEFormat.Activate
        Set o = ActiveDocument.InlineShapes(i).OLEFormat.Object
        o.Pages(1).Shapes(1).Text = o.Pages(1).Shapes(1).NameID & " " & Now()
    Next
End Sub

Последний объект не закрывается. Закроется при щелчке мышью в любом месте на вордовской странице. Ну ли программно в ворде что-нибудь сделать.
Проявляется результат редактирования как-то не сразу. Наверное при деактивации редактируемого объекта.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 19:06 
Не в сети

Зарегистрирован: 17 дек 2019, 13:26
Сообщений: 13
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Сначала работал. Я попробовал поменять одну строку изменения текста на следующую:
o.Pages(1).Shapes(1).Text = "aaa"
с такой строкой код виснет и не выполняется.
Потом вернул все обратно несколько раз позапускал и изначальный код перестал работать. Скрин ошибки приложил


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 19:10 
Не в сети

Зарегистрирован: 17 дек 2019, 13:26
Сообщений: 13
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Вот файл


Вложения:
1.gif
1.gif [ 73.83 Кб | Просмотров: 288 ]
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 19:25 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1751
Очков репутации: 100619

Добавить очки репутацииУменьшить очки репутации
Возможно файл, взятый из интернета заблокирован. Нужно открыть его свойства и нажать Unblock.
Иначе при попытке его редактирования он ломается (наверное).
Ну и проверить, что макросы разрешены.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 19:28 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1751
Очков репутации: 100619

Добавить очки репутацииУменьшить очки репутации
Вот здесь


Вложения:
unblock.JPG
unblock.JPG [ 15.25 Кб | Просмотров: 313 ]
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 19:35 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1751
Очков репутации: 100619

Добавить очки репутацииУменьшить очки репутации
Скачал на другую машину, разблокировал. Работает.
Включение макросов в свойствах Visio


Вложения:
MacroEnable.JPG
MacroEnable.JPG [ 17.63 Кб | Просмотров: 312 ]
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: в открытие в ворде рисунка визио
СообщениеДобавлено: 17 дек 2019, 22:16 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1751
Очков репутации: 100619

Добавить очки репутацииУменьшить очки репутации
Небольшое дополнение.
Чтобы выйти из режима редактирования объекта нужно закрыть документ Visio (.Object.Close). Но при этом остается селектирование.
Сбросить селектирование - ActiveDocument.Range(0, 0).Select
И не мешало бы уточнить, что встроенный объект - это именно рисунок Visio. Это через ClassType.
В итоге более корректный код выглядит примерно так:
Код:
Sub ttt2()
    For i = 1 To ActiveDocument.InlineShapes.Count
        Set Of = ActiveDocument.InlineShapes(i).OLEFormat
        If Left(Of.ClassType, 13) = "Visio.Drawing" Then
            Of.Activate
            Of.Object.Pages(1).Shapes(1).Text = Timer()
            Of.Object.Save
            Of.Object.Close
        End If
    Next
    ActiveDocument.Range(0, 0).Select
End Sub

Еще бы избавиться от моргания...
И ускорить. У меня редактирование каждого объекта занимает около 3 секунд.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB