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

Форум по вопросам применения и программирования в Visio
Текущее время: 28 мар 2024, 20:01

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


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


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 15 фев 2016, 23:59 
Не в сети

Зарегистрирован: 15 фев 2016, 23:57
Сообщений: 3
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Всем удоброго дня! Возникла необходимость выделить все листы в visio (а их очень много) и разом поменять написанное в них в определенный шрифт. Как это сделать? Чупствую, что без макроса не обойтись. Спасибо!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 16 фев 2016, 00:43 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Ну должно быть что-то типа такого
Код:
Sub ttt()
    For Each pg In ActiveDocument.Pages
        For Each shp In pg.Shapes
            '...
        Next
    Next
End Sub

Только вместо точек нужно подставить то, что скрывается за словом "поменять". Уточнить нужно.
Макрос переберет все шейпы на всех страницах.
Это если нет групп. При наличии групп макрос усложнится.
Если вложенность групп большая, усложнится еще больше.
---------
При некоторых условиях вообще достаточно поменять стиль (это если все написано одним шрифтом). Тогда вообще ничего перебирать не потребуется и макросы писать не нужно.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 16 фев 2016, 00:49 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Tumanov писал(а):
При некоторых условиях вообще достаточно поменять стиль
за стили можно прочесть в этой ветке
Стили шейпов

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 16 фев 2016, 07:29 
Не в сети

Зарегистрирован: 15 фев 2016, 23:57
Сообщений: 3
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Ну должно быть что-то типа такого
Код:
Sub ttt()
    For Each pg In ActiveDocument.Pages
        For Each shp In pg.Shapes
            '...
        Next
    Next
End Sub

Только вместо точек нужно подставить то, что скрывается за словом "поменять". Уточнить нужно.
Макрос переберет все шейпы на всех страницах.
Это если нет групп. При наличии групп макрос усложнится.
Если вложенность групп большая, усложнится еще больше.
---------
При некоторых условиях вообще достаточно поменять стиль (это если все написано одним шрифтом). Тогда вообще ничего перебирать не потребуется и макросы писать не нужно.


то есть там где '... надо написать вроде 'Arial'? что-то не работает(
по поводу групп - здесь нет проблем, а что такое "вложенность"?


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
situation писал(а):
по поводу групп - здесь нет проблем, а что такое "вложенность"?
фигуры находящиеся внутри группы называются вложенными. их код типа
Tumanov писал(а):
Код:
For Each shp In pg.Shapes
не захватит, придется добавлять механизм рекурсии (то самое усложнение о котором писал Tumanov).
situation писал(а):
то есть там где '
о какой версии визио идет речь ? например в визио 2010 разработчики очень постарались и хорошо спрятали кнопки для редактирования стилей
если все надписи сделаны одним типом шрифта и одного размера, т.е. стилем по умолчанию. достаточно изменить этот стиль по умолчанию.

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 16 фев 2016, 10:28 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Цитата:
то есть там где '... надо написать вроде 'Arial'? что-то не работает(

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 16 фев 2016, 13:45 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Surrogate писал(а):
о какой версии визио идет речь ?
В версии визио 2003 редактирование стилей разработчики не скрывали. Находилось оно в меню Format
Изображение

в 2007 визио эта команда осталась там же, но она была видна только при включенном режиме разработчика !
Изображение
Изображение

в версиях 2010/2013 довольно проблематично найти эту команду, я рекомендую использовать плагин Поиск команд Visio от пользователя nbelyh
Николай Белых в статье Поиск команд Visio писал(а):
Данный бесплатный плагин для Visio позволяет быстро найти команды в Visio. Если Вы используете Visio 2010/2013 то возможно Вы сталкивались с ситуацией когда опция или команда, легко доступная в предыдущих версиях, оказалась глубоко запрятанной. С помощью данного плагина найти такую команду можно просто набрав ее название (часть слова или описаня) и нажав Enter. Все команды, которые содержат введенное слово, будут показаны данным плагином как кнопки. и Вы сможете либо использовать нужную команду, либо добавить ее на панель чтобы она была под рукой в дальнейшем.
Изображение

в версии 2016 Microsoft сделала улучшенный встроенный поиск команд, похожий на поиск от nbelyh
Visio Team в статье Новые возможности Visio 2016 писал(а):
Новые возможности Visio 2016
Помощник, ускоряющий выполнение различных задач
Изображение
На ленте Visio 2016 есть текстовое поле Что вы хотите сделать?. В него можно вводить слова и фразы, описывающие то, что вы хотите сделать. Кроме того, с помощью этого поля можно получить справку по интересующей вас теме.
Подробнее…

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


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

Зарегистрирован: 15 фев 2016, 23:57
Сообщений: 3
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Цитата:
то есть там где '... надо написать вроде 'Arial'? что-то не работает(

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


сделал как Вы сказали, в VBA появились коды, которые просто трудно понять:

Цитата:
Sub Macro3()

'Enable diagram services
Dim DiagramServices As Integer
DiagramServices = ActiveDocument.DiagramServicesEnabled
ActiveDocument.DiagramServicesEnabled = visServiceVersion140 + visServiceVersion150

Dim UndoScopeID1 As Long
UndoScopeID1 = Application.BeginUndoScope("Font")
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionCharacter, 0, visCharacterFont).FormulaU = "52"
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionCharacter, 0, visCharacterDblUnderline).FormulaU = "FALSE"
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionCharacter, 0, visCharacterOverline).FormulaU = "FALSE"
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionCharacter, 0, visCharacterStrikethru).FormulaU = "FALSE"
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionCharacter, 0, 11).FormulaU = "FALSE"
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionCharacter, 0, visCharacterDoubleStrikethrough).FormulaU = "FALSE"
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionCharacter, 0, visCharacterRTLText).FormulaU = "FALSE"
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionCharacter, 0, visCharacterUseVertical).FormulaU = "FALSE"
Application.EndUndoScope UndoScopeID1, True

'Restore diagram services
ActiveDocument.DiagramServicesEnabled = DiagramServices

End Sub


а версия используется 2013-ая


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 16 фев 2016, 21:49 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Application.ActiveWindow.Page.Shapes.ItemFromID(1) это то, что у нас называется shp.
visCharacterFont - это выбор фонта. Скорее всего именно то, что Вам нужно.
Дальше ставятся в False подчеркивания, зачеркивания - это можно опустить.
Короче, скорее всего будет достаточно одной строчки
Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionCharacter, 0, visCharacterFont).FormulaU = "52"
только ее нужно переделать следующим образом
shp.CellsSRC(visSectionCharacter, 0, visCharacterFont).FormulaU = "52"
Складываем все в кучку
Код:
Sub ttt()
    For Each pg In ActiveDocument.Pages
        For Each shp In pg.Shapes
            shp.CellsSRC(visSectionCharacter, 0, visCharacterFont).FormulaU = "52"
        Next
    Next
End Sub

Ну, а если чего-то не хватит, будем смотреть дальше :)


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Tumanov писал(а):
При некоторых условиях вообще достаточно поменять стиль (это если все написано одним шрифтом). Тогда вообще ничего перебирать не потребуется и макросы писать не нужно.
Мы так и не узнали, за то что из себя представляет файл, может быть обойдется без порьбы в стиле
Прокопий писал(а):
только vba, только hardcore

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 06 янв 2022, 21:54 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 08 мар 2020, 00:19
Сообщений: 336
Использую Visio c: 2019
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Код:
Sub ttt()
    For Each pg In ActiveDocument.Pages
        For Each shp In pg.Shapes
            shp.CellsSRC(visSectionCharacter, 0, visCharacterFont).FormulaU = "52"
        Next
    Next
End Sub


А как можно поменять шрифт, если у шейпа несколько строк character и их количество не известно?
Содержимое спрятано под спойлер ↓
Спойлер:
Вложение:
2022-01-06_20-50-32.png
2022-01-06_20-50-32.png [ 3.41 Кб | Просмотров: 765 ]

_________________
Группа в VK Фигуры электрики для Visio


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 06 янв 2022, 22:02 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Сначала уточнить количество строк функцией Shape.RowCount(Section), а потом в цикле пройтись по всем строкам от 0 до n-1.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 06 янв 2022, 23:40 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 08 мар 2020, 00:19
Сообщений: 336
Использую Visio c: 2019
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Сначала уточнить количество строк функцией Shape.RowCount(Section), а потом в цикле пройтись по всем строкам от 0 до n-1.

Количество строк показывает правильно. Но почему то при выдаче результата добавляет лишнюю строчку со значение 0. Или я что то не так делаю?
Код:
Sub ttt()
Dim shp As Visio.Shape
Dim s As Integer

Set shp = Application.ActiveWindow.Selection(1)

s = shp.RowCount(Visio.visSectionCharacter)

Debug.Print "Кол-во строк Character = " & s
For i = 0 To s

Debug.Print "Кегль = " & shp.CellsSRC(visSectionCharacter, i, visCharacterSize).Result(visPoints) & "pt"

Next i

End Sub

Содержимое спрятано под спойлер ↓
Спойлер:
Вложение:
2022-01-06_22-36-06.png
2022-01-06_22-36-06.png [ 39 Кб | Просмотров: 729 ]

_________________
Группа в VK Фигуры электрики для Visio


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 07 янв 2022, 00:10 
Не в сети
Ветеран

Зарегистрирован: 26 авг 2019, 21:07
Сообщений: 267
Использую Visio c: 2019
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
в цикле вместо s должно быть s-1

_________________
САПР-АСУ
https://github.com/gtfox/
YouTube


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 07 янв 2022, 00:14 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 08 мар 2020, 00:19
Сообщений: 336
Использую Visio c: 2019
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
gtfox писал(а):
в цикле вместо s должно быть s-1

А почему? вычитать 1 надо для всех секций?

_________________
Группа в VK Фигуры электрики для Visio


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 07 янв 2022, 00:20 
Не в сети
Ветеран

Зарегистрирован: 26 авг 2019, 21:07
Сообщений: 267
Использую Visio c: 2019
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
Нумерация счетчика в цикле начинается с нуля. Этот ноль является первым элементом в выходном списке значений, а цифра 6 - это 7-й элемент. Но 7-й строки нет в секции, поэтому возвращается 0pt
Добавьте n=n+1, поставьте точку останова на этой строке
Код:
....
Debug.Print "Кегль = " & shp.CellsSRC(visSectionCharacter, i, visCharacterSize).Result(visPoints) & "pt"
n=n+1
....

Дополнено позднее: Ссылка на SDK где описано как появляются строки с разным форматированием текста в разделе Character: Working with a shape's text in XML for Visio.

_________________
САПР-АСУ
https://github.com/gtfox/
YouTube


Последний раз редактировалось Surrogate 04 июл 2022, 19:32, всего редактировалось 2 раз(а).
Ссылка на SDK где описано как


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как разом выделить все листы и в них изменить шрифт?
СообщениеДобавлено: 07 янв 2022, 00:23 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 08 мар 2020, 00:19
Сообщений: 336
Использую Visio c: 2019
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
gtfox писал(а):
Нумерация счетчика в цикле начинается с нуля. Этот ноль является первым элементом в выходном списке значений, а цифра 6 - это 7-й элемент. Но 7-й строки нет в секции, поэтому возвращается 0pt

Понятно. Спасибо 8-)

_________________
Группа в VK Фигуры электрики для Visio


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

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



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

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


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

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