Форум пользователей Visio http://visio.getbb.ru/ |
|
2 банальных вопроса http://visio.getbb.ru/viewtopic.php?f=6&t=1113 |
Страница 1 из 3 |
Автор: | Surrogate [ 14 апр 2017, 13:23 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
lite.fun писал(а): получаю type mismatch для передачи строковых значений в визио их нужно в тройные кавычки запихивать. и использовать свойство FormulaКод: Application.ActiveDocument.DocumentSheet.Cells("User.DocFormat").Formula = """aaa"""
|
Автор: | Surrogate [ 14 апр 2017, 13:42 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
lite.fun писал(а): как то возможно из VBA считать значения "Общее число строк" и "Связанные строки"? да, слишком много лишнего. собственно количество записей вроде так можно получить Первое значение пока получаю так: Код: intCount = ThisDocument.DataRecordsets.Count
|
Автор: | Shishok [ 14 апр 2017, 14:23 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Цитата: да, слишком много лишнего. собственно количество записей вроде так можно получить Ну, скорей вот так: Код: Sub CountRows()
Dim lngRowIDs() As Long, AllRowCount As Integer With ThisDocument lngRowIDs = .DataRecordsets(.DataRecordsets.Count).GetDataRowIDs("") End With AllRowCount = UBound(lngRowIDs) + 1 End Sub |
Автор: | Shishok [ 14 апр 2017, 15:01 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
А насчет связанных строк: Код: Sub Test_LinkRows() Dim LinkRowCount As Integer LinkRowCount = AllLinkRowCount(1) ' число в скобках - это порядковый номер подключенного источника данных Debug.Print LinkRowCount End Sub Private Function AllLinkRowCount(DataRecordsetsItem) Dim DataRecordsetID As Integer, sh As Visio.Shape With ThisDocument DataRecordsetID = .DataRecordsets(DataRecordsetsItem).ID End With For Each sh In ActivePage.Shapes If sh.IsCustomPropertyLinked(DataRecordsetID, 1) Then AllLinkRowCount = AllLinkRowCount + 1 Next End Function Этот код считает связанные строки только для шейпов на активном листе. Правильно считает если: К каждому шейпу на листе подключено не более 1 источника. |
Автор: | lite.fun [ 17 апр 2017, 13:12 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Surrogate, Shishok спасибо за ответы! 1. По передаче строковых значений понял (как же заморочено то ) 2. По получению значений свойств базы: Цитата: Ну, скорей вот так: Код: Sub CountRows() Dim lngRowIDs() As Long, AllRowCount As Integer With ThisDocument lngRowIDs = .DataRecordsets(.DataRecordsets.Count).GetDataRowIDs("") End With AllRowCount = UBound(lngRowIDs) + 1 End Sub Ну я собственно практически то же самое и делал ) Цитата: А насчет связанных строк: Код: Sub Test_LinkRows() Dim LinkRowCount As Integer LinkRowCount = AllLinkRowCount(1) ' число в скобках - это порядковый номер подключенного источника данных Debug.Print LinkRowCount End Sub Private Function AllLinkRowCount(DataRecordsetsItem) Dim DataRecordsetID As Integer, sh As Visio.Shape With ThisDocument DataRecordsetID = .DataRecordsets(DataRecordsetsItem).ID End With For Each sh In ActivePage.Shapes If sh.IsCustomPropertyLinked(DataRecordsetID, 1) Then AllLinkRowCount = AllLinkRowCount + 1 Next End Function Этот код считает связанные строки только для шейпов на активном листе. Правильно считает если: К каждому шейпу на листе подключено не более 1 источника. Shishok, а возможно ли как-то скорректировать код, чтобы поиск и подсчет велся не на активном листе, а на всех листах документа среди всех шейпов? Или может, например, на всех листах документа, но среди шейпов у которых конкретный мастер? |
Автор: | Shishok [ 17 апр 2017, 14:10 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Да можно, конечно. А в чем сакральный смысл знания о том сколько связанных строк в источнике? Код: Option Explicit
Sub Test_LinkRows() Dim LinkRowCount As Integer LinkRowCount = AllLinkRowCount(1, "Start", 1) ' первый аргумент в скобках - это порядковый номер подключенного источника данных ' второй аргумент в скобках - это имя мастера фигуры ' третий аргумент в скобках - это порядковый номер строки данных(ShapeData) проверяемой фигуры Debug.Print LinkRowCount End Sub Private Function AllLinkRowCount(DataRecordsetsItem, mastername, numrow) Dim DataRecordsetID As Integer, pg As Visio.Page, sh As Visio.Shape With ThisDocument DataRecordsetID = .DataRecordsets(DataRecordsetsItem).ID For Each pg In .Pages For Each sh In pg.Shapes If Not sh.Master Is Nothing Then If sh.Master.Name = mastername Then If sh.IsCustomPropertyLinked(DataRecordsetID, numrow) Then AllLinkRowCount = AllLinkRowCount + 1 End If End If Next Next End With End Function |
Автор: | lite.fun [ 17 апр 2017, 14:53 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Shishok писал(а): Да можно, конечно. А в чем сакральный смысл знания о том сколько связанных строк в источнике? Спасибо! Все корректно считает. Я не совсем понял для чего введен третий аргумент в скобках (порядковый номер строки данных(ShapeData) проверяемой фигуры)? Если не ошибаюсь, то проверяется привязана ли указанная строчка внешних данных фигуры? Если так, то насколько я понял без разницы какой там будет номер, главное чтобы в пределах количества строк внешних данных фигуры. Особого сакрального смысла нет. Я делаю файл Visio с привязанным файлом Excel, который по внешним данным будет строить документ C5 из комплекта АСУТП по 34 ГОСТу (ну естественно с некоторыми особенностями). Еще не доделал его до конца. И это значение по моей задумке будет использоваться в скрипте. Как доведу хоть чуть чуть до ума связку, создам отдельную тему, там все выложу. Может людей на форуме заинтересует, кто-то так заберет, а кто-то возможно поможет оптимизировать. P.S. Если интересно, могу выслать наработки. |
Автор: | Shishok [ 17 апр 2017, 15:18 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Цитата: Я не совсем понял для чего введен третий аргумент в скобках (порядковый номер строки данных(ShapeData) проверяемой фигуры)? Этот номер должен указывать на строку в Shape Data которая является строкой появившейся в результате связывания с источником данных. А не строка созданная, например пользователем. Иначе подсчет будет не верный. |
Автор: | lite.fun [ 17 апр 2017, 15:21 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Shishok писал(а): Цитата: Я не совсем понял для чего введен третий аргумент в скобках (порядковый номер строки данных(ShapeData) проверяемой фигуры)? Этот номер должен указывать на строку в Shape Data которая является строкой появившейся в результате связывания с источником данных. А не строка созданная, например пользователем. Иначе подсчет будет не верный. Как не удивительно указываю строку 1, это строка созданная мною в шаблоне. Все прекрасно работает ))) |
Автор: | Surrogate [ 17 апр 2017, 15:26 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
lite.fun писал(а): документ C5 из комплекта АСУТП по 34 ГОСТу я далек от АСУ ТП. погуглил что такое С5lite.fun писал(а): Я делаю файл Visio с привязанным файлом Excel не понимаю необходимости привязывать для этого Эксель ? Для потенциальной возможности обновления данных ? lite.fun писал(а): который по внешним данным будет строить IMHO собственно для построения схемы по внешним данным, нет необходимость эти данные связывать ! |
Автор: | Shishok [ 17 апр 2017, 15:30 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Цитата: Как не удивительно указываю строку 1, это строка созданная мною в шаблоне. Все прекрасно работает ))) Точно проверил? У меня работает именно как я описал. |
Автор: | Surrogate [ 17 апр 2017, 15:34 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Shishok писал(а): Точно проверил? я бы посоветовал обоим выложить свои тестовые файлы
|
Автор: | Shishok [ 17 апр 2017, 15:36 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Эм... Нюанс есть. Вообще-то первый номер строки это - 0. Может поэтому у тебя правильно считает. |
Автор: | Shishok [ 17 апр 2017, 15:46 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Цитата: Да, перепроверил. Пробовал на разные строки отсылать (1, 2, 3). Все работает. Вот скрин shape sheet мастера А какие строки относятся к источнику данных? |
Автор: | lite.fun [ 17 апр 2017, 15:48 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Shishok писал(а): А какие строки относятся к источнику данных? У меня в шаблоне в ShapeData 50 строк, и все они привязываются в данным в файле excel.
|
Автор: | Surrogate [ 17 апр 2017, 15:50 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
lite.fun писал(а): но написать собственные процедуры, которые будут строить схему без привязки файла данных, отслеживать изменения в нем и обновлять чертеж, я просто физически не смогу, в силу своих познаний. Поэтому пока иду по пути наименьшего сопротивления для меня. это хорошо, если в файле источнике просто поменялись некие значения - надписи на схеме. и это не влечет перестроения схемы - замена одного условного элемента другим !IMHO в случае серьезных изменений проще генерить новую схему заново, чем пытаться что-то в ней изменять программно.! |
Автор: | Shishok [ 17 апр 2017, 15:57 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Цитата: У меня в шаблоне в ShapeData 50 строк, и все они привязываются в данным в файле excel. Ну если ВСЕ 50 строк привязаны к источнику данных, то конечно все правильно будет работать. В диапазоне номеров от 0 до 49. Под своими строками я имел в виду, строки созданные например вручную и ни к чему не привязанные. |
Автор: | lite.fun [ 17 апр 2017, 16:01 ] |
Заголовок сообщения: | Re: 2 банальных вопроса |
Surrogate писал(а): это хорошо, если в файле источнике просто поменялись некие значения - надписи на схеме. и это не влечет перестроения схемы - замена одного условного элемента другим ! Абсолютно согласен с Вами Surrogate! Когда схема уже построена, обновляются изменения только значений полей на схеме. В случае если добавляются или удаляются строки в файле данных, то буду "перерисовывать" саму схему. По крайней мере пока иные варианты для меня слишком сложны. Возможно в будущих версиях буду пробовать иной подход.IMHO в случае серьезных изменений проще генерить новую схему заново, чем пытаться что-то в ней изменять программно.! Shishok писал(а): Ну если ВСЕ 50 строк привязаны к источнику данных, то конечно все правильно будет работать. Ну возможно я чего-то недопонимаю, но для чего создавать ShepeData строку, если она никуда не привязана? Если для каких-то внутренних задач шейпа, то для этого есть UserRow. Или это может понадобиться еще для чего то?
В диапазоне номеров от 0 до 49. Под своими строками я имел в виду, строки созданные например вручную и ни к чему не привязанные. |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |