Как бороться с «темами» в документе MS Visio

Как бороться с «темами» в документе MS Visio


Суть проблемы

В MS Visio начиная с версии 2007 появилась возможность называемая «темы» (со слов разработчиков она предназначена «для придания схеме профессионального вида»)…


As we started working on the new version of Visio, we heard from you that it should be super-easy and fast to create professional looking diagrams in Visio. To help achieve this goal, we redesigned our themes, and created new formatting options and effects that can be quickly accessed using themes. Each theme also comes with four unique variants, giving you more flexibility to fine-tune your diagrams. If you want even more control, a set of styles is provided for each theme, allowing you to format any individual shape, using professionally designed styles and colors.

Мне по долгу службы часто приходится бороться с подобным «профессиональным видом». Дело в том, что мне приходится разрабатывать техническую документацию. Преимущественно рабочую документацию, где подобное «буйство красок» не приветствуется!

Рис. 1 - Проявления тем

Из-за влияния тем могут измениться используемые шрифты, цвета линий и шрифта, заливка фигур, добавиться эффект «отражения» и тому подобные неожиданные явления!

Почему это случается ?

Дело в том, что по умолчанию к документу применена некая тема и включена галочка «Применить тему ко всем новым фигурам».


Рис. 2 - Темы на вкладке ленты «Конструктор»

Или же пользователь случайно «применит тему» щелкнув по кнопке на ленте, на вкладке «Конструктор».

После этого ваша схема, которая должна иметь сдержанный (желательно черно-белый) вид становится вдруг голубой и зеленой…


Как с этим бороться

Самый надежный способ «предохраняться», т.е. использовать фигуры, имеющие защиту от влияния тем. Но это долго и сделать такое могут не только лишь все…

Один из пользователей русскоязычного сообщества пользователей Visio написал следующие строки:

Когда компьютеры взрослели,
А код входил на перфокарты
Тогда программы были проще,
И Visio средь них легендой.
Но годы эти миновали,
А злая воля и продажность
Рожденье дали злу большому
Которое зовется "темы".
Они отнюдь не безобидны,
Как в микрософте уверяют,
А применяются огульно
Ко всем фигурам устаревшим.
И чтобы оградить потомков,
От богомерзкого разгула,
У мастеров всегда должна быть
Защита сделана примерно!

Если вы не предохранялись и ваш документ содержит лишь одну страницу, то это не беда: отключить «не нужное оформление» не долго. Хуже если документ многостраничный, самый простой способ перебрать все страницы документа и изменить текущие темы страницы на «Без темы». Разумеется в промышленных масштабах делать такое лучше макросом!

Впервые я столкнулся с этим в далеком уже 2014 году используя версию Visio 2010.

Тогда код для устранения последствий выглядел так:

Sub KillThemesFromDocuments() ' процедура для применения в Visio 2010 и старше
Dim pg As Page ' переменная - текущая страница
For Each pg In ActiveDocument.Pages ' перебор страниц в активном документе
    pg.ThemeColors = "visThemeNone" ' установить цвет темы «Без темы»
    pg.ThemeEffects = "visThemeEffectsNone" ' установить цвет темы «Без темы»
Next
ActiveDocument.RemoveHiddenInformation (visRHIStyles) ' удаление из документа неиспользуемых тем
End Sub

Не так давно смежники прислали документ со схемами в стиле «Пожар в джунглях». На этот раз я уже пересел на версию Visio 2019 и вышеуказанный код написанный в прошлом при запуске стал выдавать ошибку.

Как оказалось тут есть нюансы!

В версии Visio 2010 для сохранения документа с предлагался единственный вариант с расширением *.vsd.

Начиная с версии Visio 2013 добавился новый вариант расширения документа *.vsdx, причем этот вариант является расширением по умолчанию!

Рис. 3 - Структура современного формата файла в MS Visio

В таких документах при попытке программно изменить свойства страницы ThemeColors и ThemeEffects возникает ошибка.

Рис. 4 - Сообщение в окне Locals в VBA-редакторе

Пришлось немного модифицировать мой код для поддержки нового формата файла, добавив проверку расширения файла и использовать методы SetTheme и SetThemeVariant.

Dim pg As page ' переменная - текущая страница
Sub KillThemesFromDocuments2022() ' процедура для применения в Visio 2013+
Dim IsVSD As Boolean ' документ сохранен в старом формате vsd
IsVSD = False
If Right(ActiveDocument, 3) = "vsd" Then IsVSD = True
If IsVSD Then 
    OldFix ' запускаем процедуру если документ в формате vsd
Else
    ModernFix ' запускаем процедуру если документ в формате vsdx
End If
ActiveDocument.RemoveHiddenInformation (visRHIStyles) ' удаление из документа неиспользуемых тем
End Sub
Sub OldFix() ' процедура для файлов старого формата
For Each pg In ActiveDocument.Pages ' перебор страниц в активном документе
    pg.ThemeColors = "visThemeNone" ' установить цвет темы «Без темы»
    pg.ThemeEffects = "visThemeEffectsNone" ' установить цвет темы «Без темы»
Next
End Sub
Sub ModernFix() ' процедура для файлов нового формата
For Each pg In ActiveDocument.Pages ' перебор страниц в активном документе
    pg.SetTheme 0, 0, 0, 0, 0 ' сброс настроек страницы в «Без темы»
    pg.SetThemeVariant 0, 0, 0 ' сброс настроек страницы в «Без вариаций»
Next
End Sub

Заключение

Если вы дочитали это графоманство до конца и встретите в одном из документов подобные «чудеса» не паникуйте ! Просто примените один из выше приведенных кодов, для используемой вами версии продукта MS Visio.

Report Page