Author |
Topic |
bdfy
Belarus
267 Posts |
Posted - 02/14/2009 : 20:08:56
|
нашел наконец. appVisio.ActiveDocument.ExecuteLine "Write_sxemas" вот так работает. а run в визио нет... |
|
|
Tumanov
Russia
1198 Posts |
Posted - 02/14/2009 : 20:47:20
|
И все равно я бы поостерегся такое применять... |
|
|
bdfy
Belarus
267 Posts |
Posted - 02/15/2009 : 01:08:52
|
есть другие идеи ? да и чем я рискую ? |
|
|
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
|
|
|
bdfy
Belarus
267 Posts |
Posted - 02/15/2009 : 10:22:30
|
quote: Рискуете тем, что когда-то передадите эту конструкцию пользователю.
исключено. по крайней мере пока. а ваш код действительно работает. спасибо. в любом случае хорошо иметь альтернативый путь :) |
|
|
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. в визио работает отлично. все попытки запустить из екселя провалились (( что я не учел в этот раз ?
|
|
|
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
|
|
|
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 переключится. соответсвенно и вся картинка должна изменится. запускаю скрипт - ничего. вообще ничего не изменяется. ни свойства страницы, ни картинка.
|
|
|
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"). Блин! Заработало!
|
|
|
Topic |
|
|
|