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

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

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


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


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

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



Начать новую тему Ответить на тему  [ Сообщений: 19 ] 
Автор Сообщение
 Заголовок сообщения: Как программно вставить поле
СообщениеДобавлено: 26 окт 2021, 15:16 
Не в сети
Постоянный участник

Зарегистрирован: 24 авг 2016, 22:21
Сообщений: 72
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Добрый день.
Необходимо на листе нарисовать шейп и в тексте шейпа вставить поле с формулой, к примеру, ThePage!User.Izm1
Считаем, что User.Izm1 существует.
Подскажите, пожалуйста, как вставить поле в текст шейпа программно?

Кстати, почему-то в ShapeSheet фигуры раздел TextFields по умолчанию скрыт. Если его отобразить (галочку поставить), то при следующем просмотре ShapeSheet опять раздел скрыт.
Visio2010.
Спасибо.


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

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

Добавить очки репутацииУменьшить очки репутации
Врубаем режим записи макросов и смотрим, что получается при вставке поля.
Код:
Sub Macro1()

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

    Dim UndoScopeID1 As Long
    UndoScopeID1 = Application.BeginUndoScope("Set Text Field")
    ActiveWindow.DeselectAll
    ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(1), visSelect
    Dim vsoCharacters2 As Visio.Characters
    Set vsoCharacters2 = Application.ActiveWindow.Selection.Item(1).Characters
    vsoCharacters2.Begin = 0
    vsoCharacters2.End = 0
    vsoCharacters2.AddFieldEx visFCatDocument, visFCodeFileName, visFmtStrNormal, 1033, 0
    Application.EndUndoScope UndoScopeID1, True

    'Restore diagram services
    ActiveDocument.DiagramServicesEnabled = DiagramServices

End Sub

Исследуем:
Поле вставляется в Characters с помощью метода AddFieldEx.
По аналогии в справочнике находим, что существуют еще AddField и AddCustomField.
Как-то так.


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Tumanov писал(а):
Поле вставляется в Characters с помощью метода AddFieldEx.
По аналогии в справочнике находим, что существуют еще AddField и AddCustomField.
у меня Visio 2019, по умолчанию макрорекордером при вставке поля со ссылкой на ячейку ThePage!User.izm мне записался AddCustomFieldU. А варианты AddFieldEx, AddField и AddCustomField выдают ошибку !
Дополнено позднее: справка по Visio 2010 говорит что AddFieldEx, AddField позволяют вставлять только штатные свойства документа
M$FT в статье Characters.AddField Method (Visio) писал(а):
Remarks
Using the AddField method is similar to clicking Field on the Insert tab and inserting any of the following categories of fields in the text:
  • Date/Time
  • Document Info
  • Geometry
  • Object Info
  • Page Info

To add a custom formula field, use the AddCustomField method.

is308 писал(а):
Кстати, почему-то в ShapeSheet фигуры раздел TextFields по умолчанию скрыт. Если его отобразить (галочку поставить), то при следующем просмотре ShapeSheet опять раздел скрыт.
Visio2010.
у меня нет возможности добавить раздел используя ShapeSheet ! на сколько я знаю его можно вставить только через окно вставки поля

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


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

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
у меня Visio 2019, по умолчанию макрорекордером при вставке поля со ссылкой на ячейку ThePage!User.izm мне записался AddCustomFieldU.

Так я для простоты ссылку на файл вставил, не стал формулу писать, поэтому рекордер другую функцию выбрал. Соображает :)


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
в свою очередь в описании метода AddCustomField написано
Цитата:
Remarks
Using the AddCustomFieldU method is similar to clicking Field on the Insert tab and inserting a custom formula field in text. To add any other type of field (not custom), use the AddField method.

Valid field format constants are defined in the Visio type library in VisFieldFormats.

As a developer, you can use universal names in a program when you don't want to change a name each time a solution is localized. Use the AddCustomField method to set a custom field that uses local syntax. Use the AddCustomFieldU method to set a custom field that uses universal syntax.
Но у меня AddCustomField не работает однако!

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


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

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
Но у меня AddCustomField не работает однако!

Что значит "не работает"? Пример в студию!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как программно вставить поле
СообщениеДобавлено: 26 окт 2021, 17:41 
Не в сети
Content manager
Content manager
Аватара пользователя

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

я обращаюсь к ячейке в PageSheet текущей страницы, так что в ссылке на ячейку нет универсальных и локальных имен!
возможно это просто особенность моей версии ?

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


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

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

Добавить очки репутацииУменьшить очки репутации
Проверил у себя
Код:
Sub Macro1()
    Dim shp As Visio.Shape
    Set shp = ActivePage.Shapes(1)
    Dim vsoCharacters2 As Visio.Characters
    Set vsoCharacters2 = shp.Characters
    vsoCharacters2.Begin = 0
    vsoCharacters2.End = 0
    vsoCharacters2.AddCustomField "ThePage!User.h", visFmtNumGenUnits
End Sub

Нормально работает.
Visio Professional 2019.
Но скорее всего дело не в Visio, а в конкретном файле. Нужно пересылать неработающий пример и смотреть прямо в нем.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как программно вставить поле
СообщениеДобавлено: 27 окт 2021, 01:33 
Не в сети
Ветеран
Аватара пользователя

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

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
Но у меня AddCustomField не работает однако!

У меня тоже не работает версия Visio Professional 2019.

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как программно вставить поле
СообщениеДобавлено: 27 окт 2021, 01:48 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Может с русифицированной версией проблемы?
А можно сделать файл с одним шейпом и макросом на той машине, на которой не работает, и выложить его здесь? Я попробую запустить этот файл у себя. Может разберусь.
Надо же понять, в чем отличие...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как программно вставить поле
СообщениеДобавлено: 27 окт 2021, 09:00 
Не в сети
Постоянный участник

Зарегистрирован: 24 авг 2016, 22:21
Сообщений: 72
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
выдает ошибку !

Аналогично. 2010Pro


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как программно вставить поле
СообщениеДобавлено: 27 окт 2021, 11:57 
Не в сети
Administrator

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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как программно вставить поле
СообщениеДобавлено: 27 окт 2021, 12:02 
Не в сети
Постоянный участник

Зарегистрирован: 24 авг 2016, 22:21
Сообщений: 72
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
у меня на работе 2010 и 2013.. обе русские... в обеих версиях выходит ошибка


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как программно вставить поле
СообщениеДобавлено: 27 окт 2021, 12:04 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Tumanov писал(а):
Как я понимаю, не работает именно русская локализация? Все используют ее (у кого не работает)?
установлено 2 пакета локализации (русский и английский). попробовал с английским языковым пакетом все ОК
Вложение:
ttt.vsd [17 Кб]
Скачиваний: 46
Tumanov писал(а):
Ошибка ведь может закладываться как в момент создания файла, так и в момент исполнения макроса. Если ваш файл у меня будет работать, значит не работает исполняющая часть. А если нет, значит что-то не так в файле
файл создавался "с нуля". было добавлено только свойство страницы, прямоугольник и код. в русской локализации также происходила ошибка, так что грешить на какое-то содержимое тут нельзя :wall:
IMHO не вижу большой проблемы дописать одну лишнюю букву использовать метод AddCustomFieldU, поэтому долго тянул, чтоб поделиться образцом файла :mrgreen:

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как программно вставить поле
СообщениеДобавлено: 27 окт 2021, 12:25 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
установлено 2 пакета локализации (русский и английский). попробовал с английским языковым пакетом все ОК

Ну вот, начинает понемногу проясняться.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как программно вставить поле
СообщениеДобавлено: 27 окт 2021, 12:28 
Не в сети
Content manager
Content manager
Аватара пользователя

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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как программно вставить поле
СообщениеДобавлено: 27 окт 2021, 12:29 
Не в сети
Постоянный участник

Зарегистрирован: 24 авг 2016, 22:21
Сообщений: 72
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
AddCustomFieldU работает.
Всем огромное спасибо.


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

Зарегистрирован: 13 авг 2020, 04:53
Сообщений: 87
Использую Visio c: 2000
Уровнь квалификации: начальный
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
На Visio2021Ru с "ThePage!User.h" не пошел код(ошибка бла бла бла)..а с """ThePage!User.h""" пошел..и с Chr(34) & "ThePage!User.h" & Chr(34) тоже код отработал как должно.


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
fixer6 писал(а):
тоже код отработал как должно
а как должно ? у меня в Visio 2019 Professional
нижеприведенный код вставил тупо текст "ThePage!user.h", а не значение из ячейки ThePage!user.h
Код:
Dim vsoCharacters2 As Visio.Characters
Dim sh As Shape
Set sh = ActiveWindow.Selection.PrimaryItem
Set vsoCharacters2 = sh.Characters
vsoCharacters2.AddCustomField """ThePage!user.h""", visFmtStrNormal


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

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



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

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


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

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