Форум пользователей Visio http://visio.getbb.ru/ |
|
Атоматизация рисования схема visio через VBA http://visio.getbb.ru/viewtopic.php?f=6&t=1313 |
Страница 3 из 5 |
Автор: | nbelyh [ 04 апр 2018, 13:09 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
А Data Visualizer не хочешь попробовать? Он это должен уметь (рисовать из Excel, и проставлять свойства) IMHO пока немного сыроват, но вообще работает, и кастомные фигуры тоже можно использовать. Кстати ( привет Surrogate ) на русском вообще видео про него кто делал? А то тул крутой, а мужики-то и не знают Дополнено позднее: Surrogate в сообщении от 05 мар 2019 писал(а): А так, согласно моему опыту, обычно все кто хочет автоматизировать, просто хочет делать не что нужно, а что интересно (то есть, с практической точки зрения, проще нарисовать руками) |
Автор: | Shishok [ 04 апр 2018, 13:52 ] | ||
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA | ||
Вот так?:
|
Автор: | Tumanov [ 04 апр 2018, 14:14 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
Цитата: А так, согласно моему опыту, обычно все кто хочет автоматизировать, просто хочет делать не что нужно, а что интересно (то есть, с практической точки зрения, проще нарисовать руками) Есть и другой опыт. Самый убедительный - раскрывал структуру изделия в виде дерева (из PDM). Сотни компонентов в одном изделии. Руками за такое никто не взялся бы. А картинка очень наглядная, особенно при отслеживании изменений. Ближе к теме - в проектировании автоматики вентиляции. За бугром это как-то очень развито. Народ использует и доволен. Еще мощные картинки были с сетевыми потоками. Тоже вручную не особо прорисуешь. Но, согласен, в этих примерах используется не универсальный визуалайзер. Везде специфические построители. Под задачу. |
Автор: | nbelyh [ 04 апр 2018, 14:28 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
Tumanov писал(а): Есть и другой опыт. Самый убедительный - раскрывал структуру изделия в виде дерева (из PDM). Сотни компонентов в одном изделии. Руками за такое никто не взялся бы. А картинка очень наглядная, особенно при отслеживании изменений. Ближе к теме - в проектировании автоматики вентиляции. За бугром это как-то очень развито. Народ использует и доволен. Еще мощные картинки были с сетевыми потоками. Тоже вручную не особо прорисуешь. Но, согласен, в этих примерах используется не универсальный визуалайзер. Везде специфические построители. Под задачу. Согласен, перегнул палку Если есть конкретный заказчик/проект, лучше решать именно с привязкой к его задаче (выключатели там будут, серверы, вентили, или еще что), а не в "общем случае". Визуалайзер на все случаи жизни сделать тяжко, это все равно что задача для ИИ "сделай чтобы было красиво"... |
Автор: | Hamit [ 24 апр 2018, 09:51 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
После отпуска решил продолжить освоение VBA..)) хочу в своей UserForm сделать ComboBox (список), который брал бы данные из файла Excel. и далее, исходя из выбранного значения, в соседнее текстовое поле формы вносил соответствующее значение другого столбца из того же файла Excel. Грубо говоря, к примеру, есть файл Excel, где есть несколько столбцов, среди которых есть столбец "фамилия" и столбец "имя". Необходимо в список формы импортнуть данные столбца "фамилия" и в текстовое поле подставить соответствующее значение столбца "имя". Все фамилии и имена уникальны, не повторяются. +, если это как то отдельно настраивается, в списке формы осуществить подстановку значения по первым введенным символам. |
Автор: | Гость [ 24 апр 2018, 14:20 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
И, заодно, как сделать так, чтобы после вызова UserForm окно самого visio оставалось активным? т.е. чтобы и окно формы и страницу Visio можно было редактировать параллельно. |
Автор: | Hamit [ 24 апр 2018, 14:33 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
Гость писал(а): И, заодно, как сделать так, чтобы после вызова UserForm окно самого visio оставалось активным? т.е. чтобы и окно формы и страницу Visio можно было редактировать параллельно. Сам нашел..)) через свойство формы ShowModal |
Автор: | Hamit [ 26 апр 2018, 16:35 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
Shishok писал(а): Ну так вот - AddShapesFromStensil.zip Нашел Ваше творение: Find&Replace Addon For MS Visio Прикольно сделано Можете поделиться кодом, хотя бы частью? Хочу также реализовать у себя альтернативный стандартному поиску в visio, чтобы искать определенные значения в определенных данных фигур. с "точным" совпадением, чтобы, к примеру, при поиске "Иванов", не находилось "Иванова" если получится, то с поиском фигуры по нескольким данным ну и отображением всех возможных найденных значений, по аналогии с поиском Excel "найти все". |
Автор: | Shishok [ 26 апр 2018, 18:12 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
А эту тему смотрел? http://visio.getbb.ru/viewtopic.php?f=6&t=1024 |
Автор: | Евгени [ 03 май 2018, 12:26 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
nbelyh писал(а): на русском вообще видео про него кто делал? А то тул крутой, а мужики-то и не знают пока наши не успели снять русскоязычное видео, смотрим видео от David Parker Встроенное видео спрятано под спойлер ↓ Прямая ссылка на видео Спойлер: ↕ |
Автор: | Hamit [ 15 май 2018, 12:55 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
Shishok писал(а): А эту тему смотрел? http://visio.getbb.ru/viewtopic.php?f=6&t=1024 почитал, много букв, но почитал..)) твое творение там не раскрывается для начала пробую вывести данные по всем фигурам в debug: Код: Private Sub Test() Dim oShapes As Object For Each oShapes In ActiveDocument.Pages.Item(1).Shapes Debug.Print "Name: "; oShapes.Name; " Text: "; oShapes.Text Debug.Print "NetworkName: "; oShapes.Cells("Prop.Network_Name").ResultStr(visNone) Debug.Print "Manufacturer: "; oShapes.CellsU("Prop.Manufacturer").ResultStr(visNone) Next End Sub 1. чем отличается .Cells от .CellsU? 2. что за параметр "visNone" и какие еще варианты могут быть? 3. как лучше сравнивать, через "like" или "StrComp"? 4. ну и натолкните на мысль, как вывести в useform результат всех найденных значений с возможностью перехода по тому или иному пункту (как в Excel "найти все"). |
Автор: | Гость [ 15 май 2018, 14:50 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
Hamit писал(а): 1. чем отличается .Cells от .CellsU? CellsU это для т.н. "универсальных имен" ячеек. Cells для "локальных"Name and NameU Hamit писал(а): 2. что за параметр "visNone" и какие еще варианты могут быть? аргумент свойства ResulStr9rey писал(а): или так .ResultStr(0) вариантов много в вышеуказанном описании к ResulStr есть список VisUnitCodes Enumeration (Visio)
или так .ResultStr(visNone) ибо в хелпе по ResultStr сказано: Цитата: Passing a zero (0) is sufficient for getting the value of text string cells. |
Автор: | Shishok [ 15 май 2018, 15:06 ] | ||
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA | ||
1. чем отличается .Cells от .CellsU? Первое использует локальные имена ячеек, а второе универсальные. 2. что за параметр "visNone" и какие еще варианты могут быть? https://msdn.microsoft.com/ru-ru/office/aa342161 3. как лучше сравнивать, через "like" или "StrComp"? Смотря что тебе надо. Можно еще регулярки использовать. http://www.script-coding.com/WSH/RegExp.html 4. ну и натолкните на мысль, как вывести в useform результат всех найденных значений с возможностью перехода по тому или иному пункту (как в Excel "найти все"). В двух словах не напишешь. Нужно код писать. Время будет, может что то накропаю. Мое творение. Код в файле - Form1.vb. Вряд ли оно тебе поможет. Ну попробуй разобраться.
|
Автор: | Shishok [ 18 май 2018, 01:03 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
Вот сделал примерчик: Скачать FindShapes.zip https://yadi.sk/d/qbpj9WI9d2eqF |
Автор: | Shishok [ 11 июн 2018, 09:34 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
Улучшенный вариант: А это вариант с компонентом ListView. В Win7x32 работает. В Win10x64 не работает(по крайней мере без танцев с бубном). |
Автор: | Hamit [ 22 авг 2018, 14:00 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
Hamit писал(а): После отпуска решил продолжить освоение VBA..)) хочу в своей UserForm сделать ComboBox (список), который брал бы данные из файла Excel. и далее, исходя из выбранного значения, в соседнее текстовое поле формы вносил соответствующее значение другого столбца из того же файла Excel. Грубо говоря, к примеру, есть файл Excel, где есть несколько столбцов, среди которых есть столбец "фамилия" и столбец "имя". Необходимо в список формы импортнуть данные столбца "фамилия" и в текстовое поле подставить соответствующее значение столбца "имя". Все фамилии и имена уникальны, не повторяются. +, если это как то отдельно настраивается, в списке формы осуществить подстановку значения по первым введенным символам. В продолжение данного вопроса↑ В дебрях интернета нашел статейку: https://gregmaxey.com/word_tip_pages/populate_userform_listbox_or_combobox.html Где среди прочего описывается возможность подобного импорта 1. Late Binding 2. Early Binding 3. DAO пока пробую через Early Binding, застрял на ошибке "application-defined or object-defined error 1004", но пока не про это. Прошу посоветовать, каким образом лучше "брать" данные для ListBox/ComboBox из Excel? Заранее спасибо |
Автор: | nbelyh [ 22 авг 2018, 15:31 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
Ура! Народ из отпусков возвращается Брать данные из Excel, имея в распоряжении только Visio, проще всего с использованием VBA (при условии, что Excel установлен) Late Binding/Early Binding- это мимо кассы, это про другое. Наверное самый простой код который я могу придумать (допустим что A1:A10 - положение данных в файле Excel "C:\Path\To\The\File.xlsx", на первом листе): Код: comboBox1.List = GetObject("C:\Path\To\The\File.xlsx").Worksheets(1).Range("A1:A10").Value
|
Автор: | Hamit [ 23 авг 2018, 15:15 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
nbelyh писал(а): Наверное самый простой код который я могу придумать (допустим что A1:A10 - положение данных в файле Excel "C:\Path\To\The\File.xlsx", на первом листе): Код: comboBox1.List = GetObject("C:\Path\To\The\File.xlsx").Worksheets(1).Range("A1:A10").Value А как "закрыть" файл/объект? После вызова процедуры и закрытию окна формы в диспетчере задач висит процесс Excel А при последующем открытии любого другого Excel, или даже нового, обычными средствами Windows, Excel предлагает восстановить открытый из VBA файл. |
Автор: | nbelyh [ 24 авг 2018, 00:38 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
У меня вроде Excel не подвисает... Может быть, подвисание с данным кодом не связано? (то есть, его вызывает что-то другое?) Так что точно не могу сказать, в чем проблема. Весь код ниже: Код: Private Sub UserForm_Initialize() ComboBox1.List = GetObject("C:\Path\To\The\File.xlsx").Worksheets(1).Range("A1:A10").Value End Sub Вообще, чтобы не подвисал, достаточно не оставлять ссылок на объекты Excel. Можно попробовать явно его закрывать: Код: Private Sub UserForm_Initialize()
Set workbook = GetObject("C:\Path\To\The\File.xlsx") ComboBox1.List = workbook.Worksheets(1).Range("A1:A10").Value workbook.Application.Quit End Sub |
Автор: | Hamit [ 27 авг 2018, 16:14 ] |
Заголовок сообщения: | Re: Атоматизация рисования схема visio через VBA |
Ну и в догонку: Как автоматически определить "конец столбца"? пока такой скрипт: Код: Private Sub Data_from_Excel() Dim oWorkbook As Excel.Workbook Dim ArrayBS As Variant Dim lastRow lastRow = 1072 On Error Resume Next Set oWorkbook = GetObject("D:\Ðàçíûå îò÷åòû IT\BS_data_from_MC.xlsx") With oWorkbook ' lastRow = .Worksheets(1).Cells(Rows.Count, "B").End(xlUp).Row ' lastRow = .Worksheets(1).Range("B" & Rows.Count).End(xlUp).Row ' MsgBox lastRow ArrayBS = .Worksheets(1).Range("B2:D" & lastRow).Value ' MsgBox .Worksheets(1).Range("B10").Value MsgBox LBound(ArrayBS) & " " & UBound(ArrayBS) MsgBox ArrayBS(10, 3) End With End Sub пробую и так: Код: lastRow = .Worksheets(1).Cells(Rows.Count, "B").End(xlUp).Row и так: Код: lastRow = .Worksheets(1).Range("B" & Rows.Count).End(xlUp).Row MsgBox lastRow выдает пустоту что не так в определении последней строки? |
Страница 3 из 5 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |