All Forums
 Категория Visio
 Форум Вопросы и ответы
 Работа с Visio из внешнего макроса (в Excel)
Previous Page
Author Previous Topic Topic Next Topic

bdfy

Belarus
267 Posts

Posted - 02/14/2009 :  20:08:56
нашел наконец.
appVisio.ActiveDocument.ExecuteLine "Write_sxemas"
вот так работает. а run в визио нет...
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 02/14/2009 :  20:47:20
И все равно я бы поостерегся такое применять...
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 02/15/2009 :  01:08:52
есть другие идеи ? да и чем я рискую ?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 02/15/2009 :  06:21:26
Рискуете тем, что когда-то передадите эту конструкцию пользователю. А она у него неожиданно перестанет работать.
Например, если кто-то установит другой уровень безопасности для Visio. Да мало ли еще что может случиться...
До сих пор мне встречались примеры использования ExecuteLine только внутри одного приложения. Например, в Visio.
А другая идея - отладить нормальный путь.
Посмотрел, что не работает в Вашем макросе. Оказалось, что Excel'овский VBA не принимает конструкции Shapes(name_box) без объявления типа параметра. Обязательно нужно сказать Dim name_box As String. Причину не знаю, нужно будет уточнить при случае.
Вот такой код у меня работает.
Sub Write_sxemas()
Dim name_box As String
Set appVisio = GetObject(, "Visio.Application")
sxema = 2
name_box = "sx_" & sxema
Set vs = appVisio.ActivePage.Shapes(name_box).SpatialNeighbors(visSpatialContain, 0.2, 0)
N = vs.Count
If N > 0 Then
appVisio.ActiveWindow.DeselectAll
For Each sh In vs
appVisio.ActiveWindow.Select sh, visSelect
Next
appVisio.ActiveWindow.Selection.Export "E:\tmp\Pic" & ".gif"
Debug.Print "1"
End If
Set appVisio = Nothing
End Sub
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 02/15/2009 :  10:22:30
quote:
Рискуете тем, что когда-то передадите эту конструкцию пользователю.

исключено. по крайней мере пока.
а ваш код действительно работает. спасибо.
в любом случае хорошо иметь альтернативый путь :)
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 02/20/2009 :  11:09:39
впрочем пришла тут в голову мысль что запуская отдельные макросы можно напороться на проблемы с синхронизацией. интересно ведь следующие строки выполняются после завершения внешнего макроса или одновременно... надо бы способ придумать как проверить :)
в любом случае все делать в одном макросе скорее всего куда более правильный путь. только вот снова встретился с незадачей ((
ActiveWindow.Shape.CellsSRC(visSectionProp, 0, visCustPropsValue).FormulaU = True

ActiveWindow.Shape.CellsSRC(visSectionProp, 1, visCustPropsValue).FormulaU = False

что код делает. у страницы есть свойтсво (вместо глобальной переменной использую потом с смартшейпах как =IF(ThePage!Prop.I,1,0) и тд. так вот свойств у страницы два Prop.I, и Prop.P. вышеизложенные код пеерключает первое свойство в true. в визио работает отлично. все попытки запустить из екселя провалились (( что я не учел в этот раз ?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 02/20/2009 :  13:25:07
Сделал все, как Вы написали (код ниже). Выполняю - отлично работает.
А каким именно образом проваливаются Ваши попытки?
Sub ttt()
    Dim AppVisio As Visio.Application
    Set AppVisio = GetObject(, "Visio.Application")
    CurrValue = AppVisio.ActiveWindow.Shape.CellsSRC(visSectionProp, 0, visCustPropsValue).FormulaU
    If CurrValue Then
        AppVisio.ActiveWindow.Shape.CellsSRC(visSectionProp, 0, visCustPropsValue).FormulaU = False
    Else
        AppVisio.ActiveWindow.Shape.CellsSRC(visSectionProp, 0, visCustPropsValue).FormulaU = True
    End If
    Set AppVisio = Nothing
End Sub

Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 02/20/2009 :  16:40:59
пишу в екселе самый простой код (ост. часть отбросив)
Sub runsx()
Dim name_box As String
Set appVisio = GetObject(, "Visio.Application")


appVisio.ActiveWindow.Shape.CellsSRC(visSectionProp, 0, visCustPropsValue).FormulaU = True

appVisio.ActiveWindow.Shape.CellsSRC(visSectionProp, 1, visCustPropsValue).FormulaU = False
End sub

после его срабатывания Prop.I в визио должно в true переключится. соответсвенно и вся картинка должна изменится.
запускаю скрипт - ничего. вообще ничего не изменяется. ни свойства страницы, ни картинка.
Go to Top of Page

GDK

Russia
90 Posts

Posted - 02/24/2009 :  12:53:56
Про метод Run.
У меня случай один был. Дело было с Word. Не работал этот метод. Причём работал если я запускал другой макрос без использования параметров:
Application.Run "MyProject.MyModule.MyProcedure"
И не работал с параметрами:
Application.Run "MyProject.MyModule.MyProcedure", "TmpText"
Долго ничё не получалось. Пришлось решать проблему запуском макроса без использования параметров, а необходимые значения передавать через переменную документа.
Когда актуальность уже исчезла вдруг случайно пришла мысль. Пришёл домой, проверил типа:
call Application.Run ("MyProject.MyModule.MyProcedure", "TmpText").
Блин! Заработало!

Go to Top of Page
Previous Topic Topic Next Topic  
Previous Page
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)