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

В 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 написал следующие строки:

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

Комментарии (34)


  1. skhida
    02.11.2022 22:06
    +2

    ААААааааа! 22 год на дворе, а они всё ещё чертят в Визио!


    1. Surrogate Автор
      02.11.2022 23:13
      +1

      Кто сказал про чертежи? Я писал о схемах!

      Расскажите о вашем прогрессивном опыте ? ;)


      1. skhida
        02.11.2022 23:49

        Схема - тоже чертеж. Судя по основной надписи, у вас строительные чертежи, оформляемые по СПДС.

        Мы по старинке в Автокаде/Нанокаде.


        1. Surrogate Автор
          03.11.2022 00:01

          Нет, около-строительные мы в AutoCAD тоже делаем. А связные документы (схемы организации связи, фасады телекоммуникационных шкафов, схемы коммутации) делаем в Visio


          1. skhida
            03.11.2022 00:11

            А чем смысл? Я могу понять, если используется сторонний софт для каких-то вещей, которые проще сделать в специализированной программе: принципиальную схему, например, в KiCad'е, или ту же блок-схему какую-нибудь сложную в том же Visio. Но в чем преимущество Visio перед тем же AutoCAD'ом при подготовке простого чертежа фасада шкафа?


            1. Surrogate Автор
              03.11.2022 01:18

              @skhidaпрям так большой глобальной разницы нет, в чем готовить фасад шкафа. В автокаде "из коробки" нет "динамического блока" для этого.

              IMHO В Visio гораздо проще создавать "динамические блоки". У нас в конторе есть аналог блока в AutoCAD, у него есть фиксированный список высот шкафа (7 наиболее часто встречаемых вариантов в диапазоне от 12RU до 52RU). Для того чтобы добавить новый вариант видимости высоты шкафа нужно сделать 13 шагов.

              Я ни в коем случае не утверждаю, что подобные схемы нужно делать непременно в Visio!

              Цель данного поста: рассказать пользователю который по какой-то причине выполняет свои схемы в Visio и сталкивается неприятным «влиянием» тем, как можно от этого избавиться в многостраничном документе…


  1. Zhbert
    02.11.2022 22:54

    Чертеж по ГОСТу в Visio… Теперь я видел все.

    Хотя не, спецификация в Excel, наверное, покруче будет.


    1. skhida
      02.11.2022 23:55

      Набить спецификацию, все же, проще в Excel'е, только потом через связанные таблицы Автокада нормально в листы вставить.


      1. lumen_xp
        03.11.2022 08:39
        +1

        Делали связку Schemagee+Excel+AutoCAD для разработки конструкторской документации на шкафы АСУ. По цене получалось на одно рабочее место около 20к. руб в год. При этом макрос в Excel совершенно великолепно съедал выгрузку BOM из Schemagee и генерил ПЭ+СП с последующей выгрузкой артикулов в 1С для заказа со склада.

        По разработке заняло около 20 человеко-часов одного инженера АСУ ТП, который ни разу не программист и на VBA для души писал.

        В AutoCAD использовали блоки и их автоматическое добавление из ПЭ. Сэкономлено было на отдел несколько человеко-месяцев при разработке 100 шкафов.

        Если вдруг кому интересно, смогу вытащить част макросов, хотя давно уже не занимаюсь подобным.


        1. Surrogate Автор
          03.11.2022 10:01

          вдруг кому интересно

          Аналогично, если кто-то пользуется парадигмой "один документ - одно используемое приложение", и это приложение MS Visio:

          можно воспользоваться моим макросом по переносу содержимого спецификации из Excel в документ Visio.

          Добавление 100-страничной спецификации на стороне Visio происходит за 3-5 минут.

          Если кто-то спросит зачем это надо? Чтоб на листах спецификации была ГОСТ-оподобная рамка.


    1. Surrogate Автор
      02.11.2022 23:55
      +1

      Теперь я видел все.

      Думаю не всё! Схему эвакуации в Word или поэтажный план в Excel видели ?

      Или схему магистральной кабельной сети целого города в Excel…


      1. skhida
        03.11.2022 00:14


      1. Exchan-ge
        03.11.2022 01:18
        +2

        Думаю не всё! Схему эвакуации в Word или поэтажный план в Excel видели ?


        Тут фокус в том, что люди используют легальный софт, который стоит денег.
        И если легальный Офис и даже Visio для меня доступны по цене — то цену AutoCAD я даже не хочу смотреть :) (хотя общее представление о ней есть)

        И для создания схемы эвакуации никто никакой CAD покупать не будет — делают на том, что есть под рукой.


        1. Surrogate Автор
          03.11.2022 01:33

          @Exchan-ge, а что мешает использовать бесплатный CAD: например FreeCAD?


          1. Exchan-ge
            03.11.2022 01:52

            а что мешает использовать бесплатный CAD: например FreeCAD?


            Если надо таки рисовать что-то типа плана этажей — это микроскоп вместо молотка.
            Плюс требуется обучение и освоение с нуля, а это имеет смысл только в том случае, когда нужен именно CAD.
            А изучать по принципу «чтоб было» — нет времени.


          1. remzalp
            03.11.2022 07:52
            +2

            Порог вхождения? Я когда решил перед занятием инженерной графики попробовать самостоятельно потыкаться - не понял абсолютно ничего. Сильно не интуитивный...
            МАССИВРЕД, БЛОКРЕАКТ, ЗАИМЛИЦ, КАЛЬК, ПРЕОБРТСП, НПИВЫГР, РЗМИНСПЕКТ, РЗМИЗЛИНИЯ, СЕТЬСОГНУТЬ, МВЫНОСКАРЕД, ПЛИНИЯ

            Это первый попавшийся набор заклинаний из русскоязычного актокада :)


            1. Surrogate Автор
              03.11.2022 08:38

              Порог вхождения?

              Одно дело когда вам нужно для пожарного надзора нарисовать план эвакуации из вашего офиса площадью 50 кв. м, то да нарисовал один раз в Word/Excel и забыл.

              Другое дело если вы профессионально проектируете инженерные системы в ТЦ площадью over9000 кв. м. Тут вам придется научиться, даже если вам удастся "быстро войти" с MS Word для этих задач вы быстро сломаетесь…

              Это первый попавшийся набор заклинаний из русскоязычного актокада

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

              Кстати командной строкой в CAD, пользуются не только лишь все! Например у нас в конторе даже люди с опытом работы в AutoCAD около 10 лет, 80% пользователей не используют командную строку…


    1. ABHuman
      03.11.2022 10:10
      +1

      Хотя не, спецификация в Excel, наверное, покруче будет.

      Вам для справки самый популярный САПР из класса MCAD (т.е. в машиностроении) SolidWorks как раз на сборочных чертежах задействует именно Excel для формирования спецификации.


  1. Ingwarl
    03.11.2022 10:53

    ActiveDocument.RemoveHiddenInformation (visRHIStyles) ' удаление из документа неиспользуемых тем

    скобачки убери...


    1. Surrogate Автор
      03.11.2022 10:58

      скобачки убери

      Только что проверил на своем компе с Visio 2019 работают оба варианта (со скобками и без).

      На официальном сайте M$ в описании метода RemoveHiddenInformation тоже нет однозначности:

      в разделе Syntax пишут в скобках;

      в разделе Example пишут без скобок.


      1. Ingwarl
        03.11.2022 13:09

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

        Если же хочется со скобками, то нужно добавить ключевое слово Call перед процедурой (методом).


        1. Surrogate Автор
          03.11.2022 13:34

          Я передаю значение константы. Никакой ссылки у меня нет


          1. Ingwarl
            03.11.2022 15:23

            я понял, что ты ничего не понял. спасибо за внимание.


            1. Surrogate Автор
              03.11.2022 15:42

              Ви таки правы́ ! И вам не хворать…


      1. Ingwarl
        03.11.2022 13:11

        и это очень однозначно написано в описании к оператору Call


  1. ViktorAPT
    03.11.2022 11:11

    Хорошая дельная статья, я черчу в Визио инженерные системы зданий, много моментов по которым я это делаю описаны здесь, кто реально знаком с Visio можно продолжить дискуссию. Тем кто считает что Автокад/Нанокад лучше желаю успехов. :)


    1. ABHuman
      03.11.2022 11:19

      А мы вам желаем не пропускать запятые в предложении.


      1. ViktorAPT
        03.11.2022 13:15

        Спасибо тебе добрый АБЧеловек :)


    1. Surrogate Автор
      03.11.2022 11:34

      @ViktorAPT, спасибо за «лучи добра»!

      Тем кто считает что Автокад/Нанокад лучше желаю успехов

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

      Кому-то проще набросать «План эвакуации» в MS Word и не тратить время на изучение CAD. Это хорошо на небольших объектах, но если вам потребуется подготовить планировку большого торгового центра вы столкнетесь с ограничением Word на размер листа 55,87x55,87 мм.

      Мне кажется нарисовать «серьезную планировку» в Word, не заточенном под эти задачи - та еще трата времени и нервов…


      1. Surrogate Автор
        03.11.2022 12:48

         55,87x55,87 мм

        Я имел в виду  55,87x55,87 см, иными словами Word не работает с листами больше А3!


        1. ABHuman
          03.11.2022 13:33

          Я имел в виду  55,87x55,87 см, иными словами Word не работает с листами больше А3!

          Добрый человек вам подскажет, что формат А2 - 42,0 х 59,4 см. А формат А2 в два раза больше формата А3.


          1. Surrogate Автор
            03.11.2022 13:49

            Спасибо, Кэп @ABHuman!
            И что я написал не так ? До формата A2 максимальный размер страницы Word недотягивает…


            1. ABHuman
              03.11.2022 14:34

              Вне рамки зона мёртвая, поэтому вполне работать можно и это далеко не А3 формат, а сильно больше. Вам же не привыкать работать с извращениями, например, из ПДФ восстанавливать DWG. И это вместо движения к сквозному проектированию или хотя бы к Постановлению Правительства от 5 марта 2021 г. 331.


              1. Surrogate Автор
                03.11.2022 15:27

                Вне рамки зона мёртвая, поэтому вполне работать можно и это далеко не А3 формат, а сильно больше.

                Т.е. вы хотите сказать что можно использовать лист размером 55х55 см. На котором будет рамка формата А3 и за ее пределами можно что-то изобразить ?

                У меня два вопроса:

                1. Можно ссылку на документ/постановление который это допускает ? Достаточно просто название документа.

                2. А как подобный документ складывать чтобы подшить в папку ?

                Вам же не привыкать работать с извращениями

                Откуда вы знаете к какому из 54 гендеров я себя отношу ?

                из ПДФ восстанавливать DWG

                Каюсь, был такой грех в 2014 году

                Постановлению Правительства от 5 марта 2021 г. 331

                Нагуглил текст Постановления, читал 3 раза не понял чем этот мой пост и вся моя деятельность противоречит данному Постановлению ?