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

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

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


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


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)



Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 17 апр 2017, 16:08 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
lite.fun писал(а):
Абсолютно согласен с Вами Surrogate!
это хорошо !
lite.fun писал(а):
Ну возможно я чего-то недопонимаю, но для чего создавать ShepeData строку, если она никуда не привязана? Если для каких-то внутренних задач шейпа, то для этого есть UserRow. Или это может понадобиться еще для чего то?
а я пока не понимаю, зачем вообще привязывать внешние данные конкретно для данной задачи. я в подобных случаях добавлял в шейпшит документа нужное количество строк. и из них на схеме брал все данные.
перед каждым открытием документа программно. проверял отличаются ли данные в эксель и ячейки в TheDoc, если отличаются тупо обновлял значения ячеек TheDoc. можно и по умолчанию обновлять значения ячеек


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 17 апр 2017, 16:15 
Не в сети
Новичок

Зарегистрирован: 07 апр 2017, 10:18
Сообщений: 32
Использую Visio c: 2013
Отрасль: АСУТП
Уровнь квалификации: Чуть выше среднего
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
а я пока не понимаю, зачем вообще привязывать внешние данные конкретно для данной задачи. я в подобных случаях добавлял в шейпшит документа нужное количество строк. и из них на схеме брал все данные.
перед каждым открытием документа программно. проверял отличаются ли данные в эксель и ячейки в TheDoc, если отличаются тупо обновлял значения ячеек TheDoc. можно и по умолчанию обновлять значения ячеек
Ну это можно (и нужно) делать когда знания разработчика близки к Вашим ))) В моем случае рановато. А как это вообще можно сделать? У меня в документе может быть несколько сотен шейпов. Для каждого из них нужно набор данных в TheDoc! создать? И потом написать скрипт, который в определенной области определенного листа excel ищет нужную строку и уже потом проверяет идентичность?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 17 апр 2017, 16:27 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
была у нас несколько лет назад одна затея автоматизировать создание однолинейной электрической схемы.
Robink в сообщении #2728 писал(а):
Групповая сеть. Мне сама идея наличия двух центров (в граф документе и в табличном) кажется ущербной. Мне по душе два варианта компоновки:
1. Таблица используется лишь для старта разработки, ввода первоначальных данных. Весь расчет помещается в граф документ. В самом граф документе исходя из изменений внесенных пользователем вручную, выполняется перерасчет (программное ядро в граф. документе, используются события).
2. Таблица используется для ввода/выбора первоначальных данных. Программное ядро строит граф. документ. При изменении исходных данных будет исправляться или заменяться полностью первоначально полученный граф документ.
мне такие варианты нравятся больше.
lite.fun писал(а):
У меня в документе может быть несколько сотен шейпов. Для каждого из них нужно набор данных в TheDoc! создать?
это перебор. в TheDoc заносится общая информация. У меня был случай в шаблоне было более 500 ячеек в TheDoc (максимально возможное значение для той задачи). Которые заполнялись, в зависимости от значений в эксель. потом проводился анализ того, чем заполнился TheDoc и исходя из этого строилась схема и заполнялись текстовые поля на ней.
возможно я слишком предвзято отношусь к использовании внешних данных. но для меня проще создавать ячейки в TheDoc по продуманному мной алгоритму! чем привязывать сначала данные, потом их как то обрабатывать и на основе этого строить схему и т.п.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 17 апр 2017, 17:07 
Не в сети
Новичок

Зарегистрирован: 07 апр 2017, 10:18
Сообщений: 32
Использую Visio c: 2013
Отрасль: АСУТП
Уровнь квалификации: Чуть выше среднего
Очков репутации: 0

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

Surrogate писал(а):
возможно я слишком предвзято отношусь к использовании внешних данных. но для меня проще создавать ячейки в TheDoc по продуманному мной алгоритму! чем привязывать сначала данные, потом их как то обрабатывать и на основе этого строить схему и т.п.
Ну все подходы имеют право на жизнь. Тут я думаю уже все зависит от конкретики задачи и условий, ну и конечно от навыков и предпочтений разработчика.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 08:20 
Не в сети
Новичок

Зарегистрирован: 07 апр 2017, 10:18
Сообщений: 32
Использую Visio c: 2013
Отрасль: АСУТП
Уровнь квалификации: Чуть выше среднего
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Вслед за вопросом о записи текстового значения в user-defined документа, созрел еще один вопрос:
Как из VBA производить считывание и запись конкретного значения в user-defined документа, если в нем данные в виде постоянного списка (например: "AI;AO;DI;DO")? Например нужно считать и изменить второе значение в списке. Т.е. есть ли в VBA что-то наподобие функции INDEX(0,Prop.Name.Format) в shape sheet?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 09:42 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Ну, например так:

Код:
Option Explicit

Sub test()
Dim sh As Visio.Shape

Set sh = ActiveWindow.Selection.PrimaryItem
Call EditListValue(sh.ID, "Prop.Row_5.Format", 4, 377)
' 1 аргумент - Id шейпа в котором изменяются данные
' 2 аргумент - имя ячейки для изменения
' 3 аргумент - порядковый номер значения из списка значений
' 4 аргумент - новое значение(число или строка). Если нужно вставить дробное число, _
' то записываем как строку - "37,87"
End Sub

Private Sub EditListValue(shapeId As Integer, nameCell As String, numValue As Integer, newValue)
Dim arrList

With ActivePage.Shapes.ItemFromID(shapeId).Cells(nameCell)
    arrList = Split(.FormulaU, ";") ' создаем массив значений из формулы
    arrList(numValue - 1) = newValue ' меняем одно из значений
    .FormulaU = Join(arrList, ";") ' создаем строку из значений массива и записываем в ячейку
End With

End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 13:51 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Или вот, по другому:
Код:
Option Explicit

Sub test()
Dim sh As Visio.Shape

Set sh = ActiveWindow.Selection.PrimaryItem
Call ReplaceListValue(sh.ID, "Prop.Row_5.Format", "AD0", "SD5")
' 1 аргумент - Id шейпа в котором изменяются данные
' 2 аргумент - имя ячейки для изменения
' 3 аргумент - значение для поиска в списке значений
' 4 аргумент - новое значение для замены
End Sub

Private Sub ReplaceListValue(shapeId As Integer, nameCell As String, oldValue As String, newValue As String)
' Подобный способ довольно опасен. В списке значений могут быть, например - "AD005", "SAD020" и т.п. Здесь везде AD0 будет заменено на "SD5".
' И естественно получится белиберда.

With ActivePage.Shapes.ItemFromID(shapeId).Cells(nameCell)
    .FormulaU = Replace(.FormulaU, oldValue, newValue)
End With

End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 14:32 
Не в сети
Новичок

Зарегистрирован: 07 апр 2017, 10:18
Сообщений: 32
Использую Visio c: 2013
Отрасль: АСУТП
Уровнь квалификации: Чуть выше среднего
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Shishok писал(а):
Ну, например так:

Код:
Option Explicit

Sub test()
Dim sh As Visio.Shape

Set sh = ActiveWindow.Selection.PrimaryItem
Call EditListValue(sh.ID, "Prop.Row_5.Format", 4, 377)
' 1 аргумент - Id шейпа в котором изменяются данные
' 2 аргумент - имя ячейки для изменения
' 3 аргумент - порядковый номер значения из списка значений
' 4 аргумент - новое значение(число или строка). Если нужно вставить дробное число, _
' то записываем как строку - "37,87"
End Sub

Private Sub EditListValue(shapeId As Integer, nameCell As String, numValue As Integer, newValue)
Dim arrList

With ActivePage.Shapes.ItemFromID(shapeId).Cells(nameCell)
    arrList = Split(.FormulaU, ";") ' создаем массив значений из формулы
    arrList(numValue - 1) = newValue ' меняем одно из значений
    .FormulaU = Join(arrList, ";") ' создаем строку из значений массива и записываем в ячейку
End With

End Sub

Спасибо за помощь, Shishok! Переделал под запись в user-defined документа, но не смог переделать процедуру под чтение. Прошу прощения, сам косяк, забыл изменить на функцию


Последний раз редактировалось lite.fun 18 апр 2017, 14:44, всего редактировалось 1 раз.

Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 14:43 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Наверное так:
Код:
Sub testing()
dim V
V = ReadListValue("User.Base1", 2)
End Sub

Private Function ReadListValue(nameCell As String, numValue As Integer)
Dim arrList
Dim docSheet As Visio.Shape
Dim visDoc As Visio.Document
Set visDoc = Application.ActiveDocument
Set docSheet = visDoc.DocumentSheet

With docSheet.Cells(nameCell)
    arrList = Split(.FormulaU, ";") ' создаем массив значений из формулы
    ReadListValue = arrList(numValue - 1) ' читаем значение
End With

End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 15:38 
Не в сети
Новичок

Зарегистрирован: 07 апр 2017, 10:18
Сообщений: 32
Использую Visio c: 2013
Отрасль: АСУТП
Уровнь квалификации: Чуть выше среднего
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
lite.fun писал(а):
Спасибо за помощь, Shishok! Переделал под запись в user-defined документа, но не смог переделать процедуру под чтение. Прошу прощения, сам косяк, забыл изменить на функцию
Рано радовался. При попытке записать текстовое значение, например "37,87" останавливается с ошибкой:
Изображение
На строке:
Код:
.FormulaU = Join(arrList, ";")   ' создаем строку из значений массива и записываем назад в ячейку

А если я пытаюсь в качестве заменяемого значения вписать vsoDataRecordset.name
Код:
Call EditListValue(NameCell, 1, vsoDataRecordset.name)
то получаю вот такую ошибку:
Изображение
и остановку на той же строке


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 16:22 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Цитата:
Рано радовался. При попытке записать текстовое значение, например "37,87" останавливается с ошибкой:

Попробуй убрать кавычки и заменить запятую точкой.

А вообще выложи файл где ты это делаешь. Хотя бы с одной твоей фигурой. И с кодом.
А то так не поймешь. Возможно проблема из за типа данных которые ты пытаешься вставить.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 16:33 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
В ячейки "User.Bla-Bla.Value" можно вставлять формулы, значения(десятичный разделитель - точка), строки(обязательно в кавычках) или даты(в формате типа - 01/02/2017, зависит от региональных настроек).
Вот проверь это. Так ли оно у тебя.
Если ты хочешь вставить список значений, то должно быть - "12;34;34,6;123" (именно в кавычках)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 16:50 
Не в сети
Новичок

Зарегистрирован: 07 апр 2017, 10:18
Сообщений: 32
Использую Visio c: 2013
Отрасль: АСУТП
Уровнь квалификации: Чуть выше среднего
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Shishok писал(а):
А вообще выложи файл где ты это делаешь. Хотя бы с одной твоей фигурой. И с кодом.
А то так не поймешь. Возможно проблема из за типа данных которые ты пытаешься вставить.
В файле сейчас такой бардак, что будет проще описать словами, чем расписывать откуда там ноги растут.

Shishok писал(а):
В ячейки "User.Bla-Bla.Value" можно вставлять формулы, значения(десятичный разделитель - точка), строки(обязательно в кавычках) или даты(в формате типа - 01/02/2017, зависит от региональных настроек).
Вот проверь это. Так ли оно у тебя.
Если ты хочешь вставить список значений, то должно быть - "12;34;34,6;123" (именно в кавычках)
Кажется выявил проблему, но как исправить не знаю.
В общем все перечисленные Вами варианты без каких-либо проблем записываются в любые ячейки списка кроме ПЕРВОЙ и ПОСЛЕДНЕЙ. При попытке записать что-угодно в первую ячейку вылетает ошибка "#NAME?", а при попытке записать в последнюю ячейку вылетает ошибка "Отсутствует кавычка". Видимо надо как-то переделывать код, предложенный Вами.

P.S. Запись я произвожу в ячейку User-defined, находящуюся не в шейпе, а в документе.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 16:55 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Цитата:
P.S. Запись я произвожу в ячейку User-defined, находящуюся не в шейпе, а в документе.

Вот и выложи этот документ, бог с ним бардаком. Разберемся. Без файла не поймешь что там у тебя. Или файл секретный? :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 17:09 
Не в сети
Новичок

Зарегистрирован: 07 апр 2017, 10:18
Сообщений: 32
Использую Visio c: 2013
Отрасль: АСУТП
Уровнь квалификации: Чуть выше среднего
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Shishok писал(а):
Вот и выложи этот документ, бог с ним бардаком. Разберемся. Без файла не поймешь что там у тебя. Или файл секретный? :)
Да нет конечно, ничего секретного. Планировал сначала его привести в рабочее состояние, убрать все хвосты и выложить на форуме для дальнейшей оптимизации всем миром. Но раз такая пьянка...
В Module2 находится скрипт Proba(), вот его смотрите
P.S. Там всякие строчки-хвосты есть, не обращайте внимание

Забыл сказать, что само тело процедуры в Module3


Вложения:
Maket C5.7z [288.37 Кб]
Скачиваний: 9
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 17:21 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Ну блин!
Цитата:
Размещение файлов в формате vsd (а не vsdx/vsdm), увеличивает вероятность ответа стремительным домкратом !!!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 18:06 
Не в сети
Новичок

Зарегистрирован: 07 апр 2017, 10:18
Сообщений: 32
Использую Visio c: 2013
Отрасль: АСУТП
Уровнь квалификации: Чуть выше среднего
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Shishok писал(а):
Ну блин!
Цитата:
Размещение файлов в формате vsd (а не vsdx/vsdm), увеличивает вероятность ответа стремительным домкратом !!!
А где там файл vsd? В архиве 2 файла: Макет С5 (№ 2) — копия.vsdm и БАЗА.xlsx. По отдельности выложить не смог, движок добавления файлов на форум работает странно, при добавлении по одному бесконечно висит на процессе загрузки.


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

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Цитата:
где там файл vsd?

Конечно там его нет. :D
Лично у меня Visio 2010. Я не могу открывать ни .vsdm, ни .vsdx. Вот в чем дело. Мне нужен .vsd. :|
Сохрани свой документ в .vsd и выложи.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 18:37 
Не в сети
Новичок

Зарегистрирован: 07 апр 2017, 10:18
Сообщений: 32
Использую Visio c: 2013
Отрасль: АСУТП
Уровнь квалификации: Чуть выше среднего
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Shishok писал(а):
Цитата:
где там файл vsd?

Конечно там его нет. :D
Лично у меня Visio 2010. Я не могу открывать ни .vsdm, ни .vsdx. Вот в чем дело. Мне нужен .vsd. :|
Сохрани свой документ в .vsd и выложи.

Ох уж этот ваш форумный юмор :P


Вложения:
5 (№ 2) — копия.vsd [737 Кб]
Скачиваний: 6
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: 2 банальных вопроса
СообщениеДобавлено: 18 апр 2017, 18:39 
Не в сети
Постоянный участник
Аватара пользователя

Зарегистрирован: 12 май 2012, 15:16
Сообщений: 91
Очков репутации: 10

Добавить очки репутацииУменьшить очки репутации
lite.fun писал(а):
Shishok писал(а):
Цитата:
где там файл vsd?

Подозреваю, речь идёт как раз о его отсутствии :roll:
Открывать .vsdm могут не только лишь все.© Тут есть народ, заставший мамонтов, и с тех пор визио не обновлявший, а .vsdm - новый формат. Найди галочку при сохранении, "сохранить как .vsd" и файл открыть сможет каждый.


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

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



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

Сейчас этот форум просматривают: Google Adsense [Bot] и гости: 3


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

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