Как стать автором
Обновить

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

Уровень сложности Средний
Время на прочтение 4 мин
Количество просмотров 2.8K

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

В 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 - Проявления тем
Рис. 1 - Проявления тем

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

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

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

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

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

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

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

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

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

Когда компьютеры взрослели,
А код входил на перфокарты
Тогда программы были проще,
И 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
Рис. 3 - Структура современного формата файла в MS Visio

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

Рис. 4 - Сообщение в окне Locals в VBA-редакторе
Рис. 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.

Обновление (от 12.12.2022)

Не так давно на одном из форумов поднималась тема, связанная с изменением размеров всех листов документа. Оказалось существует кнопка, которая позволяет сделать это одним кликом. Главное верить знать, что кнопка существует и найти эту кнопку!

Рис. 4 - Техкоммент
Рис. 4 - Техкоммент

Не буду вас сильно томить…

Рис. 5 - Скрытая опция
Рис. 5 - Скрытая опция

Кнопку можно увидеть, если щелкнуть правой кнопкой мыши по списку тем на ленте.

Рис. 6 - Определение тем, примененных к страницам документа
Рис. 6 - Определение тем, примененных к страницам документа

Наведя мышь на некоторую тему можно увидеть к каким из страниц документа применена данная тема. Тему можно применить к текущей странице или ко всем страницам документа.

Я бился с темами начиная с 2014 года, а дело оказалось в одной «тщательно запрятанной кнопке»! Уже после этого открытия мне удалось таки найти в архиве блога «О Visio по-русски» пост Темы и их параметры.

Praemonitus, praemunitus - Кто предупреждён, тот вооружён!

Иными словами, будучи предупреждённым о некоторой опасности (или возможности), человек теперь к ней подготовлен и должен с нею справиться…

Теги:
Хабы:
+4
Комментарии 34
Комментарии Комментарии 34

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн