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

Форум по вопросам применения и программирования в Visio
Текущее время: 23 июн 2017, 22:54

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


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


Размещение файлов в формате vsd (а не vsdx/vsdm), увеличивает вероятность ответа стремительным домкратом !!!



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

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

Добавить очки репутацииУменьшить очки репутации
Спасибо. А я пока доделал управление видимостью и залочиванием слоёв. Пришлось делать 3 пропрограммки: одну - запомнить установки не копируемых слоёв, другая - сброс запретов копирования и видимости, третья - восстановление. На тестовой страничке накидал фигур, часть из них отправил в бэкграунд (заблокировал слой) , у части сделал слой не видимым.
Проверил - работает. Но прицепить процедурки к копированию листов сегодня уже не успеваю. Пора бежать.
При желании можете протестить:
Спойлер: показать
Код:
Sub test_Store_Layers_CellsC()
   Dim oPage As Visio.Page: Set oPage = ActivePage
   Dim oDict: Set oDict = CreateObject("Scripting.Dictionary")
   Call Store_Layers_CellsC(oPage, oDict)
   Call Reset_Layers_CellsC(oPage)
   Call ReStore_Layers_CellsC(oPage, oDict)
End Sub

Private Sub Store_Layers_CellsC(oPage As Visio.Page, oDict)
   Dim xLayer As Visio.Layer
   For Each xLayer In oPage.Layers   '  запоминание имён и настроек Lock & UnVisible слоёв в словаре
      With xLayer
         If .CellsC(visLayerLock).FormulaU = 1 Or .CellsC(visLayerVisible).FormulaU = 0 Then
         xArr = Array(.CellsC(visLayerLock).FormulaU, .CellsC(visLayerVisible).FormulaU)
            oDict.Item(.Name) = Array(.CellsC(visLayerLock).FormulaU, .CellsC(visLayerVisible).FormulaU)
         End If
      End With
   Next xLayer
End Sub

Private Sub Reset_Layers_CellsC(oPage As Visio.Page)
   Dim xLayer As Visio.Layer
   For Each xLayer In oPage.Layers   ' UnLock & Visible слоёв
      xLayer.CellsC(visLayerLock).FormulaU = 0: xLayer.CellsC(visLayerVisible).FormulaU = 1
   Next xLayer
End Sub

Private Sub ReStore_Layers_CellsC(oPage As Visio.Page, oDict)
   Dim i%: i = CInt(LBound(Array(1)) = 1)   ' для коррекции индекса обращения к массивам на случай объявленного Option Base 1 - счёта в массиве с 1, а не с 0 по умолчанию
   Dim xLayer As Visio.Layer
   For Each xLayer In oPage.Layers
      If oDict.Exists(xLayer.Name) Then
         xLayer.CellsC(visLayerLock).FormulaU = oDict.Item(xLayer.Name)(i)
         xLayer.CellsC(visLayerVisible).FormulaU = oDict.Item(xLayer.Name)(i + 1)
      End If
   Next xLayer
End Sub

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


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

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

Добавить очки репутацииУменьшить очки репутации
Небольшое замечание:
В тех местах где ты присваиваешь значение ячейкам, например:
Код:
xLayer.CellsC(visLayerLock).FormulaU=1

лучше наверно писать:
Код:
xLayer.CellsC(visLayerLock).FormulaForceU=1

Это на случай если в этой ячейке защищенная функцией 'Guard' формула - =Guard(0).
Этот метод заменит формулу независимо от защиты.


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

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

Добавить очки репутацииУменьшить очки репутации
Shishok писал(а):
xLayer.CellsC(visLayerLock).FormulaForceU=1

Спасибо за совет. Точно не помешает. Завтра сделаю.
То же самое, очевидно, относится и к:
Код:
xLayer.CellsC(visLayerVisible)
?

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


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

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

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


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

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

Добавить очки репутацииУменьшить очки репутации
Shishok писал(а):
Везде, где может быть подобная блокировка - Guard()
Ещё бы знать, где она может быть :)
Я с формулами только в Excel работаю. А формулы в Visio для меня - нечто абсолютно не ясное. Я там только рисую планы и схемы алгоритмов

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


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

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
Ещё бы знать, где она может быть

В абсолютно любой ячейке таблицы свойств шейпа/страницы/документа. Теоретически. :)
Теоретически, потому что только пользователь может вставить эту функцию. Ну или автор смартшейпов в трафаретах.
Поэтому в принципе можно везде вставить FormulaForceU. Но с другой стороны, если кто - то заблокировал формулу в ячейке, то наверно не просто так. В общем в каждом случае думать надо. :D Как и всегда.


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

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



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

Сейчас этот форум просматривают: Google Adsense [Bot] и гости: 1


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

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