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

Форум по вопросам применения и программирования в Visio
Текущее время: 18 окт 2017, 11:23

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


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


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)



Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Копирование листа
СообщениеДобавлено: 11 ноя 2016, 14:26 
Не в сети
Постоянный участник
Аватара пользователя

Зарегистрирован: 14 сен 2012, 14:16
Сообщений: 83
Откуда: Москва
Использую Visio c: 2003
Отрасль: Телекоммуникации
Должность: Руководитель проектов ЦОД
Уровнь квалификации: VBA Excel Word
Очков репутации: 5

Добавить очки репутацииУменьшить очки репутации
Т.к. по не известной мне причине топик Перенос элементов управления на другой лист залочили, то продолжу здесь.
К тому же вопрос с автоматическим выполнением (автозапуском) необходимого набора макросов при старте Visio, как это реализовано в Excel и Word, так до конца и не решён, поэтому я решил ВРЕМЕННО (надеюсь) взять за правило всегда начинать работу с Visio с ручного открытия документа-сборника необходимых для настройки интерфейса программы "под себя" макросов путём тупого нажатия единственной CommandButton , размещённой на единственном листе документа. (блин, ну и фраза получилась :wall: )
Проще: в начале работы открываю документ с макросами, настраивающими интерфейс так, как мне нужно, а потом макросы вызываются кнопкой на листе.
Т.к. версии Visio у всех разные и менюшки/табы, соответственно, тоже разные, то кнопки вызова дорабатывающих интерфейс макросов, естественно, должны располагаться в не изменяемых от версии к версии панелях управления/вкладках.
Таких мест всего два: контекстно-изменяемое меню, всплывающее по ПКМ на выбранном элементе/группе (с ним работать - одно мучение, на Excel я уже намучился) и меню, всплывающее по ПКМ на ярлыке листа - ТО, ЧТО НАДО!!! Туда и буду вставлять кнопки вызова процедур.
Первым делом пришлось "прошерстить" интерфейс приложения на предмет выяснения .Name и .NameLocal менюшек, чтобы их потом можно было изменять программно.
Чтобы легче было однозначно "опознать" панели управления, решил, что кроме .Name и .NameLocal надо выводить ещё и перечень элементов управления, входящих в них.
Для этого написал простейшую процедуру:
Код:
Sub test_CommandBars()
   Dim oBar As CommandBar
   Dim oCtr As Controls
   Dim stext$, i%
   For Each oBar In Application.CommandBars
      With oBar
         stext = .Index & " | " & .Name & " | " & .NameLocal & " >> "
         For i = 1 To oBar.Controls.Count
            stext = stext & "|" & .Controls.Item(i).Caption
         Next i
Debug.Print stext
      End With
   Next oBar
End Sub
Результат скопировал из окна Immediate VBE, вставил его в Excel и применил "текст по столбцам", указав как разделитель символ "|".
Выяснил, что меню таба листа имеет .Name="Page Tab", .NameLocal="Вкладка страницы", .index=67 (ну, это, вполне возможно, только у меня, поэтому на него лучше не опираться).
А дальше уже проще. По аналогии с тем, как я "калечил" интерфейс Excel написал процедуру, добавляющую в меню по ПКМ на ярлыке листа выпадающую менюшку с двумя пунктами: "Дуплицировать здесь" и "Дуплицировать в открытый документ...":
Код:
Sub AddButtons()
'---------------------------------------------------------------------------------------
' Procedure    : AddButtons
' Author       : Alex_ST
' Topic_HEADER : Копирование листа
' Topic_URL    : http://visio.getbb.ru/viewtopic.php?f=6&t=1049
' Post_Author  : Alex_ST
' Post_URL     :
' DateTime     : 11.11.2016, 12:43
' Purpose      : Добавление меню копирования листа в интерфейс Visio
' Notes        :
'---------------------------------------------------------------------------------------

   ' Задаём имена (так удобнее - только в одном месте процедуры)
   Dim sCBarName$: sCBarName = "Page Tab"
   Dim sCBarNameLocal$: sCBarNameLocal = "Вкладка страницы" ' имя панели управления
   Dim sControlCaption$: sControlCaption = "Копирование страницы" ' отображаемое в интерфейсе имя
   Dim OnActArr: OnActArr = Array("Duplucate_Here", "Duplucate_Here_To") '  имена процедур, вызываемых ИЗ МОДУЛЕЙ ЭТОГО ЖЕ ДОКУМЕНТА при нажатии на кнопки нового меню
   Dim CaptArr: CaptArr = Array("Дуплицировать здесь", "Дуплицировать в открытый документ...") ' имена пунктов нового меню, вызывающих процедуры
   Dim i%
   ' Создаём дополнительное меню в указанной панели управления
   On Error Resume Next
   Application.CommandBars(sCBarName).Controls(sCBarName).Delete 'на всякий случай попробуем удалить существующее меню, чтобы не было дублирования
   With Application.CommandBars(sCBarName)
      With .Controls.Add(Type:=msoControlPopup) '  добавляем меню в панель управления
         .Caption = sControlCaption
         .TooltipText = sCBarName
         For i = 0 To UBound(OnActArr) '  добавляем в меню кнопки вызова процедур
            With .Controls.Add(Type:=msoControlButton, Temporary:=False)
               .OnAction = OnActArr(i)
               .Caption = CaptArr(i)
               .Style = 2
               ' msoButtonAutomatic=0 ' msoButtonIcon=1 ' msoButtonCaption=2 ' msoButtonIconAndCaption=3
               ' msoButtonIconAndWrapCaption=7 ' msoButtonWrapCaption=14 ' msoButtonIconAndCaptionBelow=11 ' msoButtonIconAndWrapCaptionBelow=15
            End With
         Next i
      End With
   End With
End Sub

Ну и для отладки:
Код:
Sub DelButtons() '  нужно только для тестирования - чтобы можно было легко удалить любое меню
   Dim sCBarName$: sCBarName = "Page Tab"
   Dim sControlCaption$: sControlCaption = "Копирование страницы"
   On Error Resume Next
   Application.CommandBars(sCBarName).Controls(sControlCaption).Delete
End Sub

Теперь осталось "всего лишь" :D допилить процедуры копирования листа, основываясь на процедурах, описанных Surrogate в ЭТОМ топике
Есть энтузиасты, которые напишут процедуры? (у меня свободное время на работе кончилось, а дома я не пишу)
-----------------------
Упс! А топик-то почистили и процедур там уже нет... :cry:

_________________
С уважением, Алексей
(ИМХО: Excel-2003 - THE BEST!!!)


Последний раз редактировалось Alex_ST 14 ноя 2016, 14:37, всего редактировалось 4 раз(а).

Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 11 ноя 2016, 14:36 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Alex_ST писал(а):
топик Перенос элементов управления на другой лист залочили
не может быть ! вроде значка с замком не теме нет - только что разместил там сообщение от имени анонимоуса
Alex_ST писал(а):
упс! А топик-то почистили и процедур там уже нет... :cry:
упс. я не про тот топик подумал ! а что именно почистили ?
Alex_ST писал(а):
Для этого написал простейшую процедуру:
я тоже недавно хотел сделать что-то подобное. в эксель свести информацию по командам на тулбарах/риббонах. пригодится


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 11 ноя 2016, 14:54 
Не в сети
Постоянный участник
Аватара пользователя

Зарегистрирован: 14 сен 2012, 14:16
Сообщений: 83
Откуда: Москва
Использую Visio c: 2003
Отрасль: Телекоммуникации
Должность: Руководитель проектов ЦОД
Уровнь квалификации: VBA Excel Word
Очков репутации: 5

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
пригодится
Юзай, пожалуйста. Мне не жалко. На СВОИ авторские права в VBA я обычно плюю (ни разу в жизни ни сам не заплатил ни за одну программу, ни бабла за "плоды своих трудов" не получал - "Скачал-не украл!")

_________________
С уважением, Алексей
(ИМХО: Excel-2003 - THE BEST!!!)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 11 ноя 2016, 14:56 
Не в сети
Постоянный участник
Аватара пользователя

Зарегистрирован: 14 сен 2012, 14:16
Сообщений: 83
Откуда: Москва
Использую Visio c: 2003
Отрасль: Телекоммуникации
Должность: Руководитель проектов ЦОД
Уровнь квалификации: VBA Excel Word
Очков репутации: 5

Добавить очки репутацииУменьшить очки репутации
Саш, может быть сам подпилишь свою процедуру, чтобы получилось законченное решение? (с копированием в уже открытый документ можно и потом разобраться, какой-никакой, а опыт есть)

_________________
С уважением, Алексей
(ИМХО: Excel-2003 - THE BEST!!!)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 11 ноя 2016, 15:03 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Alex_ST писал(а):
дома я не пишу
ничего я и дома пишу. посмотрю в выходные
Alex_ST писал(а):
может быть сам подпилишь свою процедуру, чтобы получилось законченное решение?
Алексей, а какое техзадание ? что именно допилить ?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 11 ноя 2016, 15:08 
Не в сети
Постоянный участник
Аватара пользователя

Зарегистрирован: 14 сен 2012, 14:16
Сообщений: 83
Откуда: Москва
Использую Visio c: 2003
Отрасль: Телекоммуникации
Должность: Руководитель проектов ЦОД
Уровнь квалификации: VBA Excel Word
Очков репутации: 5

Добавить очки репутацииУменьшить очки репутации
К стати, с постами я и сам уже запутался окончательно... Процедуру копирования ты, оказывается, выкладывал ЗДЕСЬ
-------------------
А подпилить нужно всего-то имя процедуры, чтобы подцепить её по .OnAction и проверитьь работу "во всех позах"
Ну и саму процедуру проверить на обращение к ActiveDocument а не к ThisDocument
У меня, реально, сейчас вдруг завал. Не до программирования.

_________________
С уважением, Алексей
(ИМХО: Excel-2003 - THE BEST!!!)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 11 ноя 2016, 15:35 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Alex_ST писал(а):
А подпилить нужно всего-то имя процедуры, чтобы подцепить её по .OnAction и проверитьь работу "во всех позах"
ok, как с ленточным интерфейсом это сделать я примерно знаю. а вот с классикой надо еще посмотреть !
Alex_ST писал(а):
Мне не жалко. На СВОИ авторские права в VBA
я тоже так думал до определенной поры. был у нас один пилотный проект установки оборудования для нескольких регионов. мы разобрались с новым для нас оборудованием (первый в России был подобный проект), что как и куда подключается. В общем было масса нюансов, мы набили немало шишек в процессе, я прикрутил туда не хилую автоматизацию. А потом наш Заказчик, попросил нашего Продавца наши исходники в визио. Тот "добрая душа" отдал, в итоге на оставшиеся 70 с лишним регионов наш Заказчик отдал не нашей конторе проектировать !!! Наши конкуренты с радостью воспользовались готовыми решениями. Не все правда догадались правда, как пользоваться автоматизацией - но это слабое утешение…

После этого выработал себе правило: не храню код, который автоматизирует рабочие вопросы в целевых файлах !!!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 11 ноя 2016, 15:47 
Не в сети
Постоянный участник
Аватара пользователя

Зарегистрирован: 14 сен 2012, 14:16
Сообщений: 83
Откуда: Москва
Использую Visio c: 2003
Отрасль: Телекоммуникации
Должность: Руководитель проектов ЦОД
Уровнь квалификации: VBA Excel Word
Очков репутации: 5

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
ok, как с ленточным интерфейсом это сделать я примерно знаю. а вот с классикой надо еще посмотреть !
А я как раз поэтому именно к меню ярлыка листа процедуры и прицеплял, что ярлык во всех Офисах одинаковый.
Кроме того ещё и не стал указывать при добавлении меню, куда его надо вставлять (Before:=…) , чтобы по умолчанию в конец меню добавилось.

_________________
С уважением, Алексей
(ИМХО: Excel-2003 - THE BEST!!!)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 12 ноя 2016, 02:50 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Alex_ST писал(а):
подпилить нужно всего-то имя процедуры, чтобы подцепить её по .OnAction и проверить работу "во всех позах"
тут все просто нужно лишь указать где находятся процедуры Duplucate_Here и Duplucate_Here_To в модуле класса ThisDocument (!) или в каком-то из модулей и т.п.
надо лишь одну строчку поправить. например если процедуры сидят в ThisDocument
Dim OnActArr: OnActArr = Array("ThisDocument.Duplucate_Here", "ThisDocument.Duplucate_Here_To") ' имена процедур, вызываемых ИЗ МОДУЛЕЙ ЭТОГО ЖЕ ДОКУМЕНТА при нажатии на кнопки нового меню
Alex_ST писал(а):
процедуру проверить на обращение к ActiveDocument а не к ThisDocument
поэкспериментировал с размещением кода в стенсил
в этом случае надо еще прописать имя проекта
9rey в сообщении #4506 писал(а):
.OnAction = "Prj_name!ThisDocument.Main"

Prj_name имя проекта в стенсиле.
Изображение
наша строка должна будет выглядеть так
Dim OnActArr: OnActArr = Array("ForAlexST!ThisDocument.Duplucate_Here", "ForAlexST!ThisDocument.Duplucate_Here_To")
' имена процедур, вызываемых ИЗ МОДУЛЕЙ ЭТОГО ЖЕ ДОКУМЕНТА при нажатии на кнопки нового меню

также надо добавить обработчики событий открытия стенсила и перед закрытием стенсила - которые будут добавлять/убирать это кастомное меню!
Код:
Private Sub Document_BeforeDocumentClose(ByVal doc As IVDocument)
DelButtons
End Sub
Private Sub Document_DocumentOpened(ByVal doc As IVDocument)
AddButtons
End Sub


Вложения:
Комментарий к файлу: ForAlexST.vss
ForAlexST.zip [15.73 Кб]
Скачиваний: 13
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 12 ноя 2016, 09:59 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 431
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Цитата:
также надо добавить обработчики событий открытия стенсила и перед закрытием стенсила - которые будут добавлять/убирать это кастомное меню!

Не знаю как у кого, но у меня это меню пропадает при закрытии документа и последующем открытии.
Так что может вот это и не нужно:
Код:
Private Sub Document_BeforeDocumentClose(ByVal doc As IVDocument)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 12 ноя 2016, 13:54 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
у меня вроде все ОК, тестил в визио 2003, 2010 и 2016!
на всякий случай опубликую содержимое модуля класса ThisDocument из этого стенсила
Код:
Private Sub Document_BeforeDocumentClose(ByVal doc As IVDocument)
DelButtons
End Sub
Private Sub Document_DocumentOpened(ByVal doc As IVDocument)
AddButtons
End Sub
Sub AddButtons()
'---------------------------------------------------------------------------------------
' Procedure    : AddButtons
' Author       : Alex_ST
' Topic_HEADER : Копирование листа
' Topic_URL    : http://visio.getbb.ru/viewtopic.php?f=6&t=1049
' Post_Author  : Alex_ST
' Post_URL     :
' DateTime     : 11.11.2016, 12:43
' Purpose      : Добавление меню копирования листа в интерфейс Visio
' Notes        :
'---------------------------------------------------------------------------------------

   ' Задаём имена (так удобнее - только в одном месте процедуры)
   Dim sCBarName$: sCBarName = "Page Tab"
   Dim sCBarNameLocal$: sCBarNameLocal = "Вкладка страницы" ' имя панели управления
   Dim sControlCaption$: sControlCaption = "Копирование страницы" ' отображаемое в интерфейсе имя
   Dim OnActArr: OnActArr = Array("ForAlexST!ThisDocument.Duplucate_Here", "ForAlexST!ThisDocument.Duplucate_Here_To") '  имена процедур, вызываемых ИЗ МОДУЛЕЙ ЭТОГО ЖЕ ДОКУМЕНТА при нажатии на кнопки нового меню
   Dim CaptArr: CaptArr = Array("Дуплицировать здесь", "Дуплицировать в открытый документ...") ' имена пунктов нового меню, вызывающих процедуры
   Dim i%
   ' Создаём дополнительное меню в указанной панели управления
   On Error Resume Next
   Application.CommandBars(sCBarName).Controls(sCBarName).Delete 'на всякий случай попробуем удалить существующее меню, чтобы не было дублирования
   With Application.CommandBars(sCBarName)
      With .Controls.Add(Type:=msoControlPopup) '  добавляем меню в панель управления
         .Caption = sControlCaption
         .TooltipText = sCBarName
         For i = 0 To UBound(OnActArr) '  добавляем в меню кнопки вызова процедур
            With .Controls.Add(Type:=msoControlButton, Temporary:=False)
               .OnAction = OnActArr(i)
               .Caption = CaptArr(i)
               .Style = 2
               
               ' msoButtonAutomatic=0 ' msoButtonIcon=1 ' msoButtonCaption=2 ' msoButtonIconAndCaption=3
               ' msoButtonIconAndWrapCaption=7 ' msoButtonWrapCaption=14 ' msoButtonIconAndCaptionBelow=11 ' msoButtonIconAndWrapCaptionBelow=15
            End With
         Next i
      End With
   End With
End Sub
Sub Duplucate_Here()
MsgBox "Duplucate_Here" ' пока здесь пусто
End Sub
Sub Duplucate_Here_To()
MsgBox "Duplucate_Here_То" ' пока здесь пусто
End Sub
Sub DelButtons() '  нужно только для тестирования - чтобы можно было легко удалить любое меню
   Dim sCBarName$: sCBarName = "Page Tab"
   Dim sControlCaption$: sControlCaption = "Копирование страницы"
   On Error Resume Next
   Application.CommandBars("Page Tab").Controls("Копирование страницы").Delete
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 12 ноя 2016, 14:03 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 431
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
А я себе сделал из твоего Surrogate кода:
Код:
Sub Duplucate_Here()
Dim arrPage(7) As String, oPage As Visio.Page, oPage1 As Visio.Page, oGroup As Visio.Shape

Set oPage = ActivePage
Call GetPageSettings(oPage, arrPage)

ActiveWindow.SelectAll
Set oGroup = ActiveWindow.Selection.Group

Call EditFormulas(oGroup)
oGroup.Copy

Set oPage1 = ActiveDocument.Pages.Add
Call SetPageSettings(oPage1, arrPage)
oPage1.Paste
ActiveWindow.Selection.Ungroup

ActiveWindow.Page = oPage
oGroup.Ungroup
ActiveWindow.DeselectAll
End Sub

Sub Duplucate_Here_To()
Dim arrPage(7) As String, oPage As Visio.Page, oPage1 As Visio.Page
Dim oActiveDoc As Visio.Document, oOtherDoc As Visio.Document, oDoc As Visio.Document
Dim oGroup As Visio.Shape, oActiveWindow As Visio.Window

Set oActiveDoc = ActiveDocument
Set oActiveWindow = ActiveWindow

For Each oDoc In Application.Documents
    If oDoc.Name <> oActiveDoc.Name Then
        If Not oDoc.Name Like "*.vss*" Then
            Set oOtherDoc = oDoc
            Exit For
        End If
    End If
Next

Set oPage = ActivePage
Call GetPageSettings(oPage, arrPage)

ActiveWindow.SelectAll
Set oGroup = ActiveWindow.Selection.Group

Call EditFormulas(oGroup)
oGroup.Copy

Windows.Item(2).Activate
Set oPage1 = oOtherDoc.Pages.Add
Call SetPageSettings(oPage1, arrPage)
oPage1.Paste
ActiveWindow.Selection.Ungroup
ActiveWindow.DeselectAll

oActiveWindow.Activate
oGroup.Ungroup
ActiveWindow.DeselectAll
End Sub

Private Sub GetPageSettings(oPage As Visio.Page, arrPage)
    With oPage.PageSheet
        arrPage(0) = .CellsSRC(1, visRowPage, visPageDrawingScale).FormulaU
        arrPage(1) = .CellsSRC(1, visRowPage, visPageScale).FormulaU
        arrPage(2) = .CellsSRC(1, visRowPage, visPageWidth).FormulaU
        arrPage(3) = .CellsSRC(1, visRowPage, visPageHeight).FormulaU
        arrPage(4) = .CellsSRC(1, visRowPrintProperties, visPrintPropertiesLeftMargin).FormulaU
        arrPage(5) = .CellsSRC(1, visRowPrintProperties, visPrintPropertiesRightMargin).FormulaU
        arrPage(6) = .CellsSRC(1, visRowPrintProperties, visPrintPropertiesTopMargin).FormulaU
        arrPage(7) = .CellsSRC(1, visRowPrintProperties, visPrintPropertiesBottomMargin).FormulaU
    End With
End Sub

Private Sub EditFormulas(oGroup As Visio.Shape)
Dim pinx As String, piny As String
    With oGroup
        pinx = .Cells("Pinx").FormulaU: pinx = "Guard(" & pinx & ")"
        piny = .Cells("PinY").FormulaU: piny = "Guard(" & piny & ")"
        .Cells("Pinx").FormulaU = pinx
        .Cells("Piny").FormulaU = piny
    End With
End Sub

Private Sub SetPageSettings(oPage1 As Visio.Page, arrPage)
    With oPage1.PageSheet
        .CellsSRC(1, visRowPage, visPageDrawingScale).FormulaForceU = arrPage(0)
        .CellsSRC(1, visRowPage, visPageScale).FormulaForceU = arrPage(1)
        .CellsSRC(1, visRowPage, visPageWidth).FormulaForceU = arrPage(2)
        .CellsSRC(1, visRowPage, visPageHeight).FormulaForceU = arrPage(3)
        .CellsSRC(1, visRowPrintProperties, visPrintPropertiesLeftMargin).FormulaForceU = arrPage(4)
        .CellsSRC(1, visRowPrintProperties, visPrintPropertiesRightMargin).FormulaForceU = arrPage(5)
        .CellsSRC(1, visRowPrintProperties, visPrintPropertiesTopMargin).FormulaForceU = arrPage(6)
        .CellsSRC(1, visRowPrintProperties, visPrintPropertiesBottomMargin).FormulaForceU = arrPage(7)
    End With
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 12 ноя 2016, 14:06 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 431
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
А менюшка так и пропадает из таба страницы. ХЗ.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 12 ноя 2016, 14:33 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Shishok писал(а):
А менюшка так и пропадает из таба страницы
а стенсил ForAlexST.vss к документу погрузил ?
если убрать из кода модуль Document_BeforeDocumentClose, то после закрытия стенсила наше меню выглядит так
Изображение
строка Копирование страницы есть, а выпадающего списка уже нет !


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 12 ноя 2016, 14:56 
Не в сети
Постоянный участник
Аватара пользователя

Зарегистрирован: 14 сен 2012, 14:16
Сообщений: 83
Откуда: Москва
Использую Visio c: 2003
Отрасль: Телекоммуникации
Должность: Руководитель проектов ЦОД
Уровнь квалификации: VBA Excel Word
Очков репутации: 5

Добавить очки репутацииУменьшить очки репутации
Привет, ребята!
Я на полчасика заглянул всего. Дома к тому же Visio на новый комп не поставил за ненадобностью.
Поэтому, хоть стенсил с макросами скачать и могу (не то, что на работе :) ), но поэкспериментировать, к сожалению, не могу :cry:
Поэтому чисто теоретизирую.
Саша, а стенсил, надеюсь, не закрыл? Ведь процедуры-то все в нём.
А убиение менюшки в Document_BeforeDocumentClose я поставить просто забыл, т.к. выкладывал не весь проект, а только часть кода.
А после перезапуска приложения созданные программно элементы управления (по крайней мере в Excel) обычно не восстанавливаются, т.к. по умолчанию методом .Add они создаются с со значением опционального аргумента Temporary:=True
Скорее всего так же и в Visio
К стати, в Excel у панелей управления есть метод .Reset, поэтому перед закрытием модуля можно не удалять созданное, а просто сбросить.
Вот как это сделано у меня в процедуре надстройки "Управление видимостью листов":
Код:
Sub My_Menu_Reset()
   Application.CommandBars("Ply").Reset
End Sub
(В Excel "Ply" - это имя меню ярлыка листа).
Наверное, и в Visio есть такой метод?


--- вы должны быть зарегистрированным пользователем, чтобы прочитать это содержимое ---

_________________
С уважением, Алексей
(ИМХО: Excel-2003 - THE BEST!!!)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 12 ноя 2016, 16:35 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Alex_ST писал(а):
Саша, а стенсил, надеюсь, не закрыл? Ведь процедуры-то все в нём.
в смысле закрыл ? да и весь листинг кода из стенсила, я приводил выше
--- вы должны быть зарегистрированным пользователем, чтобы прочитать это содержимое ---


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 12 ноя 2016, 20:04 
Не в сети
Постоянный участник
Аватара пользователя

Зарегистрирован: 14 сен 2012, 14:16
Сообщений: 83
Откуда: Москва
Использую Visio c: 2003
Отрасль: Телекоммуникации
Должность: Руководитель проектов ЦОД
Уровнь квалификации: VBA Excel Word
Очков репутации: 5

Добавить очки репутацииУменьшить очки репутации
Оффтоп:
Surrogate писал(а):
ленточный интерфейс на котором еще почти ничего не видно
Ну, тогда 2013 - это точно не для меня. Зрение в последнее время стало ни к чёрту. Слишком много в монитор пялюсь, наверное.
С Ribbon-интерфейсом, если он хорошо структурирован и интуитивно понятен я ещё как-то смог бы смириться (но только в Visio, где мне просто негде хранить общие для всех книг макросы, но уж никак не в Excel и Word, которые набиты макросами, самодельными менюшками и кнопочками).
А вот то, что, несмотря на далеко не бетта-версию, там фиг чего найдёшь - это для меня главный и перевешивающий практически все плюсы недостаток.

_________________
С уважением, Алексей
(ИМХО: Excel-2003 - THE BEST!!!)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Копирование листа
СообщениеДобавлено: 13 ноя 2016, 01:59 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Alex_ST писал(а):
где мне просто негде хранить общие для всех книг макросы
можно на форуме МС оставлять свои пожелания (скорее к будущим версиям)
Surrogate в сообщении #10221 писал(а):
я там разместил несколько своих пожеланий кстати:
Local storage for macros, which available for all documents
Alex_ST писал(а):
А вот то, что, несмотря на далеко не бетта-версию, там фиг чего найдёшь
это только в версии 2016 смогли порешать разработчики из MS
Изображение
На ленте Visio 2016 есть текстовое поле Что вы хотите сделать?. В него можно вводить слова и фразы, описывающие то, что вы хотите сделать. Кроме того, с помощью этого поля можно получить справку по интересующей вас теме.
для версий 2010/2013 можно попользоваться надстройкой от nbelyh
Изображение
Данный бесплатный плагин для Visio позволяет быстро найти команды в Visio. Если Вы используете Visio 2010/2013 то возможно Вы сталкивались с ситуацией когда опция или команда, легко доступная в предыдущих версиях, оказалась глубоко запрятанной. С помощью данного плагина найти такую команду можно просто набрав ее название


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

Зарегистрирован: 14 сен 2012, 14:16
Сообщений: 83
Откуда: Москва
Использую Visio c: 2003
Отрасль: Телекоммуникации
Должность: Руководитель проектов ЦОД
Уровнь квалификации: VBA Excel Word
Очков репутации: 5

Добавить очки репутацииУменьшить очки репутации
Оффтоп:
Поставил вчера вечером на домашний комп (Win-7x64) Visio-2013... :shock:
Ну, в общем-то нечто подобное и ожидал. Действительно, перейти с классического интерфейса, если к нему уже успел хорошо привыкнуть, на Ribbon (ленточный) очень трудно и, если это возможно, то проще оставаться на "старье", особенно, если привык настраивать всё "под себя".
Я, к стати, до сих пор и дома, и на работе сижу на Excel, Word-2003 Visio-2007 именно из-за классических интерфейсов. И вообще-то особых неудобств от этого не испытываю.

В общем, наверное и дома откачусь на Visio-2007 и придётся мне тему топика добивать.
-------------------
P.S. За наводку на надстройку спасибо. Нашёл на сайте автора, где её можно скачать
Радует, что можно искать на любом языке, а не только по-английски. Попробую.
Но что-то мне подсказывает, что даже с этим "протезом для увечного интерфейса" работать мне в 2013 не понравится и я всё-таки откачусь.

_________________
С уважением, Алексей
(ИМХО: Excel-2003 - THE BEST!!!)


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

Зарегистрирован: 14 сен 2012, 14:16
Сообщений: 83
Откуда: Москва
Использую Visio c: 2003
Отрасль: Телекоммуникации
Должность: Руководитель проектов ЦОД
Уровнь квалификации: VBA Excel Word
Очков репутации: 5

Добавить очки репутацииУменьшить очки репутации
Surrogate, Shishok
Завтра на работе похоже должно быть свободное время. Покручу Ваши процедуры.
Я когда-то, занимаясь автоматизацией сбора в один документ листов из нескольких ЧУЖИХ файлов Visio, написал процедурку, которая автоматом перебирала все файлы в указанной директории директории, а потом копировала их содержимое в страницы новой книги.
Всё заработало. Только, кроме сдвига "центра масс" :) наткнулся на неряшливость авторов: не нужные (запасные) шейпы-образцы они просто скидывали за границы листа. При распечатывании проекта эти
Тогда и встала проблема: "Как выделить не все шейпы на листе, а только те, которые находятся в границах печати листа?"
Так и не смог тогда это победить. А теперь, если уж делать новую процедуру копирования, надо это предусмотреть.

Surrogate, спасибо, конечно, за название имени меня :) , но вообще-то я предпочитаю в распространяемых процедурах не привязываться к конкретным именам файлов/листов/ячеек
Завтра пороюсь в своей копилке на работе, посмотрю, как узнать имя модуля VBA
Тогда можно будет перед назначением .OnAction это имя узнать и вставить как переменную.

_________________
С уважением, Алексей
(ИМХО: Excel-2003 - THE BEST!!!)


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

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



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

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


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

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