Форум пользователей Visio http://visio.getbb.ru/ |
|
2 банальных вопроса http://visio.getbb.ru/viewtopic.php?f=6&t=1113 |
Страница 2 из 3 |
Автор: | Surrogate [ 17 апр 2017, 16:08 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
lite.fun писал(а): Абсолютно согласен с Вами Surrogate! это хорошо !lite.fun писал(а): Ну возможно я чего-то недопонимаю, но для чего создавать ShepeData строку, если она никуда не привязана? Если для каких-то внутренних задач шейпа, то для этого есть UserRow. Или это может понадобиться еще для чего то? а я пока не понимаю, зачем вообще привязывать внешние данные конкретно для данной задачи. я в подобных случаях добавлял в шейпшит документа нужное количество строк. и из них на схеме брал все данные.перед каждым открытием документа программно. проверял отличаются ли данные в эксель и ячейки в TheDoc, если отличаются тупо обновлял значения ячеек TheDoc. можно и по умолчанию обновлять значения ячеек |
Автор: | lite.fun [ 17 апр 2017, 16:15 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Surrogate писал(а): а я пока не понимаю, зачем вообще привязывать внешние данные конкретно для данной задачи. я в подобных случаях добавлял в шейпшит документа нужное количество строк. и из них на схеме брал все данные. Ну это можно (и нужно) делать когда знания разработчика близки к Вашим ))) В моем случае рановато. А как это вообще можно сделать? У меня в документе может быть несколько сотен шейпов. Для каждого из них нужно набор данных в TheDoc! создать? И потом написать скрипт, который в определенной области определенного листа excel ищет нужную строку и уже потом проверяет идентичность?
перед каждым открытием документа программно. проверял отличаются ли данные в эксель и ячейки в TheDoc, если отличаются тупо обновлял значения ячеек TheDoc. можно и по умолчанию обновлять значения ячеек |
Автор: | Surrogate [ 17 апр 2017, 16:27 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
была у нас несколько лет назад одна затея автоматизировать создание однолинейной электрической схемы. Robink в сообщении #2728 писал(а): Групповая сеть. Мне сама идея наличия двух центров (в граф документе и в табличном) кажется ущербной. Мне по душе два варианта компоновки: мне такие варианты нравятся больше. 1. Таблица используется лишь для старта разработки, ввода первоначальных данных. Весь расчет помещается в граф документ. В самом граф документе исходя из изменений внесенных пользователем вручную, выполняется перерасчет (программное ядро в граф. документе, используются события). 2. Таблица используется для ввода/выбора первоначальных данных. Программное ядро строит граф. документ. При изменении исходных данных будет исправляться или заменяться полностью первоначально полученный граф документ. lite.fun писал(а): У меня в документе может быть несколько сотен шейпов. Для каждого из них нужно набор данных в TheDoc! создать? это перебор. в TheDoc заносится общая информация. У меня был случай в шаблоне было более 500 ячеек в TheDoc (максимально возможное значение для той задачи). Которые заполнялись, в зависимости от значений в эксель. потом проводился анализ того, чем заполнился TheDoc и исходя из этого строилась схема и заполнялись текстовые поля на ней. возможно я слишком предвзято отношусь к использовании внешних данных. но для меня проще создавать ячейки в TheDoc по продуманному мной алгоритму! чем привязывать сначала данные, потом их как то обрабатывать и на основе этого строить схему и т.п. |
Автор: | lite.fun [ 17 апр 2017, 17:07 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Surrogate писал(а): была у нас несколько лет назад одна затея автоматизировать создание однолинейной электрической схемы. Спасибо за наводку, внимательно изучу форум!Surrogate писал(а): возможно я слишком предвзято отношусь к использовании внешних данных. но для меня проще создавать ячейки в TheDoc по продуманному мной алгоритму! чем привязывать сначала данные, потом их как то обрабатывать и на основе этого строить схему и т.п. Ну все подходы имеют право на жизнь. Тут я думаю уже все зависит от конкретики задачи и условий, ну и конечно от навыков и предпочтений разработчика.
|
Автор: | lite.fun [ 18 апр 2017, 08:20 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Вслед за вопросом о записи текстового значения в user-defined документа, созрел еще один вопрос: Как из VBA производить считывание и запись конкретного значения в user-defined документа, если в нем данные в виде постоянного списка (например: "AI;AO;DI;DO")? Например нужно считать и изменить второе значение в списке. Т.е. есть ли в VBA что-то наподобие функции INDEX(0,Prop.Name.Format) в shape sheet? |
Автор: | Shishok [ 18 апр 2017, 09:42 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Ну, например так: Код: 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 [ 18 апр 2017, 13:51 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Или вот, по другому: Код: 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 |
Автор: | lite.fun [ 18 апр 2017, 14:32 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
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 документа, но не смог переделать процедуру под чтение. Прошу прощения, сам косяк, забыл изменить на функцию |
Автор: | Shishok [ 18 апр 2017, 14:43 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Наверное так: Код: 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 |
Автор: | Shishok [ 18 апр 2017, 16:22 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Цитата: Рано радовался. При попытке записать текстовое значение, например "37,87" останавливается с ошибкой: Попробуй убрать кавычки и заменить запятую точкой. А вообще выложи файл где ты это делаешь. Хотя бы с одной твоей фигурой. И с кодом. А то так не поймешь. Возможно проблема из за типа данных которые ты пытаешься вставить. |
Автор: | Shishok [ 18 апр 2017, 16:33 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
В ячейки "User.Bla-Bla.Value" можно вставлять формулы, значения(десятичный разделитель - точка), строки(обязательно в кавычках) или даты(в формате типа - 01/02/2017, зависит от региональных настроек). Вот проверь это. Так ли оно у тебя. Если ты хочешь вставить список значений, то должно быть - "12;34;34,6;123" (именно в кавычках) |
Автор: | lite.fun [ 18 апр 2017, 16:50 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Shishok писал(а): А вообще выложи файл где ты это делаешь. Хотя бы с одной твоей фигурой. И с кодом. В файле сейчас такой бардак, что будет проще описать словами, чем расписывать откуда там ноги растут.А то так не поймешь. Возможно проблема из за типа данных которые ты пытаешься вставить. Shishok писал(а): В ячейки "User.Bla-Bla.Value" можно вставлять формулы, значения(десятичный разделитель - точка), строки(обязательно в кавычках) или даты(в формате типа - 01/02/2017, зависит от региональных настроек). Кажется выявил проблему, но как исправить не знаю.Вот проверь это. Так ли оно у тебя. Если ты хочешь вставить список значений, то должно быть - "12;34;34,6;123" (именно в кавычках) В общем все перечисленные Вами варианты без каких-либо проблем записываются в любые ячейки списка кроме ПЕРВОЙ и ПОСЛЕДНЕЙ. При попытке записать что-угодно в первую ячейку вылетает ошибка "#NAME?", а при попытке записать в последнюю ячейку вылетает ошибка "Отсутствует кавычка". Видимо надо как-то переделывать код, предложенный Вами. P.S. Запись я произвожу в ячейку User-defined, находящуюся не в шейпе, а в документе. |
Автор: | Shishok [ 18 апр 2017, 16:55 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Цитата: P.S. Запись я произвожу в ячейку User-defined, находящуюся не в шейпе, а в документе. Вот и выложи этот документ, бог с ним бардаком. Разберемся. Без файла не поймешь что там у тебя. Или файл секретный? |
Автор: | lite.fun [ 18 апр 2017, 17:09 ] | ||
Заголовок сообщения: | Re: 2 банальных вопроса | ||
Shishok писал(а): Вот и выложи этот документ, бог с ним бардаком. Разберемся. Без файла не поймешь что там у тебя. Или файл секретный? Да нет конечно, ничего секретного. Планировал сначала его привести в рабочее состояние, убрать все хвосты и выложить на форуме для дальнейшей оптимизации всем миром. Но раз такая пьянка...В Module2 находится скрипт Proba(), вот его смотрите P.S. Там всякие строчки-хвосты есть, не обращайте внимание Забыл сказать, что само тело процедуры в Module3
|
Автор: | Shishok [ 18 апр 2017, 17:21 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Ну блин! Цитата: Размещение файлов в формате vsd (а не vsdx/vsdm), увеличивает вероятность ответа стремительным домкратом !!!
|
Автор: | lite.fun [ 18 апр 2017, 18:06 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Shishok писал(а): Ну блин! А где там файл vsd? В архиве 2 файла: Макет С5 (№ 2) — копия.vsdm и БАЗА.xlsx. По отдельности выложить не смог, движок добавления файлов на форум работает странно, при добавлении по одному бесконечно висит на процессе загрузки.
Цитата: Размещение файлов в формате vsd (а не vsdx/vsdm), увеличивает вероятность ответа стремительным домкратом !!! |
Автор: | Shishok [ 18 апр 2017, 18:27 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Цитата: где там файл vsd? Конечно там его нет. Лично у меня Visio 2010. Я не могу открывать ни .vsdm, ни .vsdx. Вот в чем дело. Мне нужен .vsd. Сохрани свой документ в .vsd и выложи. |
Автор: | lite.fun [ 18 апр 2017, 18:37 ] | ||
Заголовок сообщения: | Re: 2 банальных вопроса | ||
Shishok писал(а): Цитата: где там файл vsd? Конечно там его нет. Лично у меня Visio 2010. Я не могу открывать ни .vsdm, ни .vsdx. Вот в чем дело. Мне нужен .vsd. Сохрани свой документ в .vsd и выложи. Ох уж этот ваш форумный юмор
|
Автор: | Евгени [ 18 апр 2017, 18:39 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
lite.fun писал(а): Shishok писал(а): Цитата: где там файл vsd? Подозреваю, речь идёт как раз о его отсутствии Открывать .vsdm могут не только лишь все.© Тут есть народ, заставший мамонтов, и с тех пор визио не обновлявший, а .vsdm - новый формат. Найди галочку при сохранении, "сохранить как .vsd" и файл открыть сможет каждый. |
Страница 2 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |