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

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

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


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


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

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



Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Данные фигуры - макрос на копирование одного поля в другое
СообщениеДобавлено: 24 авг 2021, 13:22 
Не в сети
Новичок

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

Добавить очки репутацииУменьшить очки репутации
Добрый день.
Подскажите пожалуйста, или направьте в мануал
о том как определенное значение в Данные фигуры
в моем случае (см скриншот) "Код" заполнить равным исходя из другого значения этой же фигуры "Номер ИТ"
Вручную-копипаст.
Есть ли функции, макросы
Какие операторы использовать.
Никогда макросы в офисе не писал, так что если предложите оператор, прошу обвязку всего макроса приложить тоже
(begin, end, объявление переменных и библиотек)
Содержимое спрятано под спойлер ↓
Спойлер:
Вложение:
visio_macro)2408.png
visio_macro)2408.png [ 27.3 Кб | Просмотров: 541 ]


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
elislavkat писал(а):
в моем случае (см скриншот) "Код" заполнить равным исходя из другого значения этой же фигуры "Номер ИТ"
вам надо, значение занести или формулу ?
Код:
Sub ttt()
Dim shp As Shape ' объявляем переменную
Set shp = ActiveWindow.Selection.PrimaryItem  ' присваиваем переменную выделенной фигуре
Dim va As String ' объявляем переменную для хранения значения свойства
va = shp.Cells("prop.111").ResultStr("")  ' получаем значение хранящееся в свойстве prop.111
shp.Cells("prop.222").FormulaU = Chr(34) & va & Chr(34) ' прописываем в ячейку prop.222 значение из ячейки prop.111
shp.Cells("prop.333").FormulaU = "=prop.111"  ' прописываем в ячейку prop.333 ссылку на ячейку prop.111
End Sub

в чем различие между занесением значения и формулы: при занесении значения, в ячейку prop.222 будет занесено текущее значение prop.111. если в последствии значение в ячейке prop.111 изменится, то в prop.222 останется без изменений ! В случае передачи ссылки изменения будут происходить и в ячейке prop.333!!!
я ввел имена ячеек prop.111 и т.п. потому что не знаю названий свойств в вашей фигуре! названия отличаются от названий штатной фигуры Принтер, для программирования нужны имена строк их можно увидеть только в таблице свойств! На вашем скрине лишь "Подписи"

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


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

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

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
я ввел имена ячеек prop.111 и т.п. потому что не знаю названий свойств в вашей фигуре! названия отличаются от названий штатной фигуры Принтер, для программирования нужны имена строк их можно увидеть только в таблице свойств! На вашем скрине лишь "Подписи"
Конечно, с именами переменных я разберусь. Большое спасибо за ответ - буду пробовать.


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

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

Добавить очки репутацииУменьшить очки репутации
Спасибо, теперь пойду читать документацию метода для get каждый элемент выделенния принтеров )


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

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

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


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

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

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
elislavkat писал(а):
Спасибо, теперь пойду читать документацию метода для get каждый элемент выделенния принтеров )
это вы о чем?
Ну так мне надо чтобы
get массив элементов из числа выделенных (а еще лучше выделить по типу, взять массив элементов фигур)
для каждого из них
цикл от 0 до n элемента массива
выполнять замену переменной(ту функцию которую вы мне показали)
end.
у меня на странице по 10-20 устройств и желательно одной кнопкой это делать
А можно вызывать функцию при происхождении события?
Например перетаскивания строки из внешних данных на лист? В таком случае как раз код не заполняется, и для этого я все и задумал:
Код:
void onShapeApperance ()
{
do thigns
}


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

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

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
это вы о чем?
Что то вроде этого
Код:
Sub Multi()
For Each I In Application.ActivePage.Shapes.Item() As Shape, I As Variant
Application.ActivePage.Shapes.Item.Cells("Prop.ID").FormulaU(I) = Application.ActivePage.Shapes.Item.Cells("Prop._VisDM_Номер_ИТ").FormulaU(I)
Next I
End Sub
но в As Shape, compiler Error End of statement
ошибка синтаксиса за весь код пишет.
Пытался совместить функцию for each
https://docs.microsoft.com/ru-ru/office ... statements
но тут она сразу задает массив а мне такого не нужно, мне нужно работать с существующим..
ну или создать динамический и ему присвоить Application.ActivePage.Shapes.Item


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
elislavkat писал(а):
void onShapeApperance ()
{
do thigns
}
вы в VBA или на чем то Си-подобном пишете ?
elislavkat писал(а):
массив элементов из числа выделенных
вы хотите применять операцию только к выделенным в данный момент фигурам?
elislavkat писал(а):
у меня на странице по 10-20 устройств и желательно одной кнопкой это делать
или ко всем фигурам на странице отобранным по критерию происхождения от мастершейпа, например все фигуры принтера ?

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


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

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

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
или ко всем фигурам на странице отобранным по критерию происхождения от мастершейпа, например все фигуры принтера ?
я хотел бы в идеале применять операцию замены переменной к каждой фигуре
из массива фигур
выделенных по типу мастершейпа (если это легко написать) или же выделенных мною в данный момент (но первое краше)
на странице (думаю на метод получения массива фигур с документа можно перейти легко)
Оффтоп:
Да, баловался C# visual forms и в Untiy
Но уже года 3 не прикасался.


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
elislavkat писал(а):
А можно вызывать функцию при происхождении события?
Например перетаскивания строки из внешних данных на лист?
нужно добавить переменную отслеживающую события и ловить событие ShapeLinkAdded
Код:
Public WithEvents app As Application
Sub bbb()
Set app = Application
End Sub
Private Sub app_ShapeLinkAdded(ByVal Shape As IVShape, ByVal DataRecordsetID As Long, ByVal DataRowID As Long)
Debug.Print Shape.Name, DataRecordsetID, DataRowID
End Sub


elislavkat писал(а):
выделенных по типу (если это легко написать) или же выделенных мною в данный момент (но первое краше)
на странице (думаю на метод получения массива фигур с документа можно перейти легко)
в принципе все несложно, надо просто четко сформулировать что вы хотите :D
elislavkat писал(а):
Да, баловался C# visual forms и в Untiy
сейчас то вы на каком языке собираетесь писать ?
у вас все в Си-подобных терминах :)
Оффтоп:
я в институте в 1993 учил C+, при прохождении производственной практики выяснилось что препод нам давал материал классического C

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


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

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

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
в принципе все несложно, надо просто четко сформулировать что вы хотите
ох, формулировка у меня как всегда хромает)
Я чуть выше еще одно сообщение писал, вы его не заметили.
Код:
For Each I In Application.ActivePage.Shapes.Item() As Shape, I As Variant

Application.ActivePage.Shapes.Item.Cells("Prop.ID").FormulaU(I) = Application.ActivePage.Shapes.Item.Cells("Prop._VisDM_Номер_ИТ").FormulaU(I)
Next I
Вот конструкцию сделал, но не работает по причинам выше (не знаю как себя цитировать раз уже пишу ответ вам)
elislavkat писал(а):
у вас все в Си-подобных терминах
ну я просто не знаю есть ли такое в visual basic )
elislavkat писал(а):
сейчас то вы на каком языке собираетесь писать ?

visual basic как единственный мне доступный в visio для макросов )


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
elislavkat писал(а):
Я чуть выше еще одно сообщение писал, вы его не заметили.
я не заметил ошибку в синтаксисе
Код:
For Each I In Application.ActivePage.Shapes.Item() As Shape, I As Variant
в цикле For Each перебор идет внутри группы фигур листа (в нашем конкретном случае)
Код:
dim shp as shape
for each shp in ActiveDocument.Shapes
Дополнено позднее:
elislavkat писал(а):
но в As Shape, compiler Error End of statement
ошибка синтаксиса за весь код пишет.
крайне желательно указывать строку в которой ошибка вылетает !

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


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

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

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
крайне желательно указывать строку в которой ошибка вылетает !
Содержимое спрятано под спойлер ↓
Спойлер:
Вложение:
Комментарий к файлу: вот как выглядит ошибка
v.png
v.png [ 95.97 Кб | Просмотров: 521 ]

но в As Shape, compiler Error End of statement


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

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

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


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

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

Добавить очки репутацииУменьшить очки репутации
Оффтоп:
Surrogate писал(а):
выделяете текст который хотите цитировать, и в левой части сообщения жмите по ссылке Цитата
разобрался. Просто при написании ответа снизу было окно в котором было видно только ваше сообщение (а оказывается оно прокручивается по всем сообщениям беседы)


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

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

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


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

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

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
в цикле For Each лишнее !
этот цикл перебирает фигуры, значит I к нему не относится
Код:
Sub Multi()
Dim elementShape As Shape
For ElementShape in Application.ActivePage.Shapes
Application.ActivePage.Shapes.Item.Cells("Prop.ID") = Application.ActivePage.Shapes.Item.Cells("Prop._VisDM_Номер_ИТ")
End Sub
переписал, но теперь не понимаю как без I использовать конструкцию For Each..
Если снизу заменю Application.ActivePage.Shapes.Item на свою переменную elementShape то это будет не правильно- он будет менять строки только внутри этой elementShape

прошу подсказать)


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

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

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


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

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

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
elislavkat писал(а):
переписал, но теперь не понимаю как без I использовать конструкцию For Each
а зачем она вам ?
а я по другому и не представляю эту логику. :oops:
Дайте пример (а лучше на моих переменных )


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
elislavkat писал(а):
а я по другому и не представляю эту логику.
в данном случае есть перебор объектов (шейпов) в коллекции шейпов расположенных на активной странице
есть альтернативный вариант перебора
Код:
Sub bbb()
Dim i As Integer, shp As Shape
For i = 1 To ActivePage.Shapes.Count ' перебор по количеству фигур
Set shp = ActivePage.Shapes.Item(i)
Next
End Sub
elislavkat писал(а):
Дайте пример (а лучше на моих переменных )
в вашем случае надо среди всего множества фигур отфильтровывать принтеры

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


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

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



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

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


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

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