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

LeoAbyss

Russia
20 Posts

Posted - 04/14/2011 :  09:13:01
Приветствую всех.
Есть стенсил. Мне нужно, чтобы при создании новой страницы шейп из этого стенсила автоматически добавлялся на эту новую страницу.
Добавить макрос на событие PageAdded - легко. Но как этот макрос перенести из стенсила в текущий документ?
Если не совсем понятно - пример:
1. Создаем новый документ (пустой, никаких макросов нет)
2. Вставляем шэйп из стенсила (в стенсиле есть макрос отрабатывающий добавление новой страницы)
3. Вставляем новую страницу.. и вот тут должен вставится шейп из стенсила

Как-то так.. :)

Surrogate

Russia
122 Posts

Posted - 04/14/2011 :  10:05:52  Visit Surrogate's Homepage
Шейпы в пунктах 2 и 3 разные ?

Go to Top of Page

LeoAbyss

Russia
20 Posts

Posted - 04/14/2011 :  10:09:41
Нет, это один и тот же шейп. Он и в стенсиле один. Можно создать шаблон, конечно, но, по ряду причин, его использование нежелательно.

Edited by - LeoAbyss on 04/14/2011 10:10:21
Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 04/14/2011 :  10:29:27  Visit Surrogate's Homepage
http://visio.getbb.ru/viewtopic.php?f=6&t=44

год назад я задавал похожий вопрос :)

и еще надо чтоб в макросе из стенсила было указание на документ не ThisDocument, а ActiveDocument!

Go to Top of Page

LeoAbyss

Russia
20 Posts

Posted - 04/14/2011 :  10:36:41
Вот это прописано в макросе у стенсила:

Private Sub Document_PageAdded(ByVal Page As IVPage)
Application.ActiveWindow.Page.Drop Application.Documents.Item("Штамп по ГОСТ.vss").Masters.ItemU("Штамп"), 0, 0
End Sub


Событие PageAdded не происходит.
Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 04/14/2011 :  11:06:50  Visit Surrogate's Homepage
я в событиях (events) еще не разобрался :(

в соседней ветке был пример с обработчиком событий, там для того чтоб заработал обработчик нужно было запустить стартовый макрос !

Go to Top of Page

LeoAbyss

Russia
20 Posts

Posted - 04/14/2011 :  11:18:03
Да нет же. Вопрос не в событии (если этот же макрос поместить в ДОКУМЕНТ, то все прекрасно работает). Проблема в том, что в НОВОМ ДОКУМЕНТЕ этого макроса, естественно, нет. Этот макрос есть только у стенсила. Так вот и спрашивается - каким образов в ДОКУМЕНТЕ запустить макрос открытого и активного СТЕНСИЛА, который обрабатывает событие PageAdded в ДОКУМЕНТЕ.
Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 04/14/2011 :  11:28:33  Visit Surrogate's Homepage
Теперь понял ! у меня был пример без обработчиков события, там была такая хитрость (посоветовал Геннадий Туманов) - сам макрос записан в одном файле, жмешь в нем Alt+F11. Открываешь другой файл (в котором нет ни одного макроса) и запускаешь макрос, если указание на файл в макросе было ActiveDocument то все работает.

нечаянно форматнул флешку с этим примером, восстановил и теперь имею массу папок и файлов с именами 001, 002. вот найду выложу пример


Edited by - Surrogate on 04/14/2011 11:29:22
Go to Top of Page

LeoAbyss

Russia
20 Posts

Posted - 04/14/2011 :  11:35:08
Спасибо. Жду примера. :) Потому что ничего не понимаю. :) Вроде макрос как раз и записан как ActiveDocument
Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 04/14/2011 :  11:43:07  Visit Surrogate's Homepage
те три строчки, это и был весь макрос ?

Go to Top of Page

LeoAbyss

Russia
20 Posts

Posted - 04/14/2011 :  11:51:21
Да. Я же написал, что мне нужно просто вставлять определенный шейп на каждую вновь создаваемую страницу.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/14/2011 :  16:29:28
А отслеживание события добавления страницы - это единственный вариант?
Дело в том, что при этом возникает задача подсадить макрос в любой документ. С точки зрения безопасности это криминал, поэтому такая операция всячески затрудняется.
А если сделать программку, которая сможет добавить определенный шейп на каждый лист документа Visio - такое не годится?
Технология при этом изменится. Сначала создается документ, создаются и заполняются все листы (без штампа). Потом, когда документ закончен, запускается приложение, которое на каждый лист добавит штамп.
Сам этот процесс можно обставить как "набрасывание" файла с документом на иконку на рабочем столе. При этом запустится экзешник, примет из параметров обращения имя файла, обработает файл и закроется.
Можно сделать его поумнее - пусть проверяет наличие штампа на листе и, если штамп уже есть, то второй не ставит.
Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 04/14/2011 :  20:10:55  Visit Surrogate's Homepage
этот код находился во внешнем файле, открывается целевой файл запускается макрос. у меня не получалось открывать стенсилы из внешних файлов, поэтому штамп берется из файла с макросом

Option Explicit
Public WithEvents moVSD As Visio.Document
Dim pagelist As String
Private moApp As Visio.Application
Dim VSDpage As Visio.Page
Sub moVSD_Documentopened(ByVal moVSD As Visio.IVDocument)
moVsd_PageAdded
End Sub
Sub moVsd_BeforeDocumentOpen(ByVal Document As Visio.IVDocument)
PageAdd
End Sub
Sub PageAdd()
pagelist = ";"
    Set moVSD = ActiveDocument
   End Sub
Private Sub moVsd_PageAdded(ByVal Page As Visio.IVPage)
Dim mast As Master
Set VSDpage = ActivePage
Set mast = ThisDocument.Masters.ItemU("Штамп")
VSDpage.Drop Application.Documents.Item("Gost.vss").Masters.ItemU("Штамп"), 0, 0
End Sub


Edited by - Surrogate on 04/14/2011 20:45:17
Go to Top of Page

LeoAbyss

Russia
20 Posts

Posted - 04/15/2011 :  05:10:57
Нет, использовать стороннюю программу не получится. Да и неудобно это для пользователя, в общем-то. Штамп ведь занимает некоторое количество пространства листа и пользователю придется постоянно об этом думать.
Неужели нет никаких способов (кроме шаблона) вставки объекта на вновь создаваемую страницу?
Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 04/15/2011 :  07:57:38  Visit Surrogate's Homepage
почему нельзя пользоваться сторонним макросом ? у вас в компании айтишниками запрещено использовать макросы (у нас было такое одно время)
в чем неудобство - прикрутил макрос, назначил на него кнопку или комбинацию клавиш и создавай хоть миллион страниц ...
про занятие штампом некоторого места на листе тоже не понял: бывают штампы с автопозиционированием (на этом сайте в разделе "Склад полезных материалов" или на главной странице есть новость от 16.10.2009 г., где размещены мои автопозиционирующиеся штампы)


Go to Top of Page

LeoAbyss

Russia
20 Posts

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