All Forums
 Категория Visio
 Форум Вопросы и ответы
 поиск страницы по имени
Author Previous Topic Topic Next Topic  

r22

10 Posts

Posted - 08/17/2006 :  16:40:16
можно ли в visio проверить содержит ли документ страницу с заданным именем или нет, соотв. вернуть - true/false

Tumanov

Russia
1198 Posts

Posted - 08/17/2006 :  18:56:15
Sub ttt()
Debug.Print PgTst("Page-2")
Debug.Print PgTst("Page-4")
End Sub

Function PgTst(PgName As String) As Boolean
Dim Pg As Visio.Page
On Error Resume Next
Set Pg = ActiveDocument.Pages(PgName)
If Pg = Empty Then PgTst = False Else PgTst = True
Set Pg = Nothing
On Error GoTo 0
End Function
Go to Top of Page

r22

10 Posts

Posted - 08/18/2006 :  12:58:28
Спасибо!
но как мне из ShapeSheet передать в этот код значение (имя страницы) и, само главное, как обратно получить true/false?

ещё раз спасибо!

Edited by - r22 on 08/18/2006 12:58:48
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 08/18/2006 :  20:04:10
А как и в каком виде Вы его (имя страницы) получили в ShapeSheet?
Go to Top of Page

r22

10 Posts

Posted - 08/21/2006 :  12:37:55
по тексту, который вбит в шейп (текст в шейпе = названию страницы, которую нужно открыть, предварительно узнав есть вообще такая страница или нет)

Edited by - r22 on 08/21/2006 12:42:30
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 08/21/2006 :  18:40:18
Например, вот так.
Заводите ячейку, в которую нужно возвращать результат (например, Custom Properties).
Придумываете, когда выполнять действие (например, при перемещении шейпа).
Вписываете в ячейку ShapeSheet вызов процедуры, возвращающей результат в вышеуказанную ячейку.

Проверяем все это на деле:
Слегка видоизменяем макросы
Sub ttt(shpObj As Visio.Shape)
shpObj.Cells("Prop.Row_1").Formula = PgTst(shpObj.Text)
End Sub
Function PgTst(PgName As String) As Boolean
Dim Pg As Visio.Page
On Error Resume Next
Set Pg = ActiveDocument.Pages(PgName)
If Pg = Empty Then PgTst = False Else PgTst = True
Set Pg = Nothing
On Error GoTo 0
End Function
На странице Page-1 рисуем квадратик. В него вписываем текст Page-1. Создаем в нем Custom Properties.
Открываем его ShapeSheet и в ячейку EvwntXFMod вписываем =CALLTHIS("ThisDocument.ttt",)
Открываем окно Custom Properties для наблюдения и начинаем проверку.
Слегка перемещаем шейп. В Custom Properties наблюдаем значение TRUE.
Вносим в шейп текст Page-3 и опять двигаем его. В Custom Properties появляется значение FALSE.
Go to Top of Page

r22

10 Posts

Posted - 08/22/2006 :  12:11:03
БОЛЬШОЕ СПАСИБО! Всё получилось!
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)