Author |
Topic |
ivan
31 Posts |
Posted - 06/14/2006 : 15:17:37
|
Есть код: ActiveWindow.DeselectAll ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(1), visSelect ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(165), visSelect Application.ActiveWindow.Selection.ConnectShapes
можно ли его переделать так, чтобы без участи пользователя визио сам соединял фигуры, получая айди фигуры?
|
|
brace
Russia
358 Posts |
Posted - 06/14/2006 : 18:04:35
|
включи макро рекордер проделай все ручками выключи макро рекордер посмотри какой красивый макрос получился используй его если устраивает. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 06/14/2006 : 18:57:22
|
Переделать, чтоб без участия пользователя можно. Только это должно с чего-то начаться. Например, будет функция, принимающая два ID и соединяющая шейпы. Или должно обрабатываться событие опускания шейпа на лист, а макрос поищет, с кем бы его соединить и соединит. Короче, вопрос - откуда возьмутся ID и как их примет макрос? А работает и имеющийся код без участия пользователя. |
|
|
ivan
31 Posts |
Posted - 06/15/2006 : 15:41:55
|
ID как раз берутся из той таблицы, откедова осуществлялся импорт в визио. к примеру в таблице эксель или акссес, задается еще один столбец с названием "ID" так вот после импорта, все фигуры, уже имеющиеся на листе принимают номера ID со сдвигом номером на число фигур. То есть было у вас 10 фигур для импорта и уже на листе еще 20 фигур. 10 фигур вы импортировали с айди (1, 2, 3, 4 и т. д.) то при работе с ID фигур всего листа. уже имеющиеся фигуры (родные), будут иметь айди с номерами, начинающимися от 11 (11, 12, 13, и т. д. до 30). это я заключил исходя из того, что в приведенном коде, фигура с номером 1 (это та, которая была импортирована), а с номером "165", уже та, которая была на листе. далее я с номером 165 хотел соединить и другие. и у них айди было именно то, которое я задал в таблице до проведения импорта. вот. причем когда я записывал макросссс, номер 165 вычислил сам визио, хотя в его особых свойствах такой строки не значилось. |
|
|
brace
Russia
358 Posts |
Posted - 06/15/2006 : 16:02:48
|
quote: номер 165 вычислил сам визио
визио айди не вычисляет он их назначает каждому шейпу свой посмотреть айди можно так... Format > Special |
|
|
ivan
31 Posts |
Posted - 06/15/2006 : 18:21:30
|
а понятно, тогда как допустим объяснить то, шо если я в таблице импортирую фигуры с айди, а айди других фигур, имеющихся на листе уже меняются со сдвигом на число импортированных фигур? |
|
|
Tumanov
Russia
1198 Posts |
Posted - 06/15/2006 : 20:47:00
|
Вы что-то упустили, не так посмотрели. Visio не меняет ID уже нарисованных шейпов. Если Вы удаляете шейпы, то в нумерации появляются дырки. Если потом добавлять новые, то дырки начинают заполняться. Но если шейп остается на листе, то его ID всегда неизменен. |
|
|
ivan
31 Posts |
Posted - 06/16/2006 : 11:08:15
|
тогда странное, если визио не изменяет айди тех фигур, которые уже на листе бил до импорта, тогда как тогда объяснить, что импортируемые фигуры с новыми айди и их нумерация не конфликтует с имеющимися на листе? |
|
|
ivan
31 Posts |
Posted - 06/16/2006 : 11:11:00
|
так вот вернувшись к автоматическому соединению фигур. ведь в опции дополнения/запустить дополнение/организэйшинал чат на основании чего-то визио соединяет фигуры? ведь не только на основании уникальных названий? |
|
|
brace
Russia
358 Posts |
Posted - 06/16/2006 : 12:37:58
|
ты взял частный случай а задаешь общий вопрос по визио известно что : визио для разного типа схем ведет себя по разному при рисовании Organization Shart...он ведет себя так как ты подметил при рисовании графика выполнения работ он уже другой визио при рисовании LAN схема локальной сети он опять другой и набор шейпов разный для разного типа схем
|
|
|
ivan
31 Posts |
Posted - 06/16/2006 : 17:18:03
|
ну знаете ли, методы индукции и дедукции еще никто не запрещал. поэтому попутно, выясняя одну проблему можно выйти на одну общую проблему, и в итоге понимание общего смысла поможет в дальнейшем не теребить ваше священное спокойствие и такое же внимание. и по поводу макроса, вверху темы, есть макрос, я его записывал и проделывал все ручками. вопрос был в другом. он не работал даже если я еще кучу строк вставлю с айди фигур, он не хочет работать. все до чего я додумался, это взять и привязать горячие клавиши, потом удалить 2 строки, где упоминается айди фигуры и далее вручную и в определенном порядке выделяя фигуры и щелкая горячие клавиши и тогда все соединялось. вопрос в том, шо бы дать списком фигуры с их айди и научить вба соединять их самому. вот и все. |
|
|
ivan
31 Posts |
Posted - 06/16/2006 : 17:21:54
|
quote: Originally posted by brace
ты взял частный случай а задаешь общий вопрос по визио известно что : визио для разного типа схем ведет себя по разному при рисовании Organization Shart...он ведет себя так как ты подметил при рисовании графика выполнения работ он уже другой визио при рисовании LAN схема локальной сети он опять другой и набор шейпов разный для разного типа схем
и потом импорт данных из эксель файла поддерживает каждый шаблон. поэтому даже для разных шаблонов предусматривается одинаковое поведение и инструменты. вот потому я и перешел на общую тему, чтобы хоть как-то объяснить то, шо я имею ввиду, если вам затруднительно понимать. |
|
|
ivan
31 Posts |
Posted - 06/16/2006 : 17:27:13
|
***** "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(6),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(8),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(10),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(12),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(14),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(15),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(16),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(17),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(19),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(20),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(24),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(25),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(30),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(34),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(36),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(39),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(47),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(49),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(51),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(57),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(59),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(68),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(70),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(72),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(76),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(77),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(79),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(87),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(90),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(94),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(96),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" "ActiveWindow.DeselectAll ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(101),visSelect ActiveWindow.SelectApplication.ActiveWindow.Page.Shapes.ItemFromID(111),visSelect Application.ActiveWindow.Selection.ConnectShapes" ****
так вот по списку загнать это в макрос не получилось. фигура под номером 111 - это та, с которой надо было соединить все остальные.
|
|
|
Tumanov
Russia
1198 Posts |
Posted - 06/16/2006 : 20:16:33
|
Когда наконец-то упомянули Organisation Chart, стало ясно, почему Вы ошибаетесь :) В приложении Organisation Chart экспортируются и импортируются не ID шейпов. Это другие ID. Они вычисляются не движком Visio, а приложением Organisation Chart. И хранятся они в другом месте - в ячейке User.UniqueID. Этот ID только иногда случайно может совпасть с ID, который используется в Page.Shapes.ItemFromID(). |
|
|
ivan
31 Posts |
Posted - 06/17/2006 : 12:57:05
|
так я шаблон никакой не использовал и организэйшинал чарт привел как пример того, что визио соединяет встоенными средствами и не на основании айди фигуры. но ведь как-то он их соединяет! |
|
|
Tumanov
Russia
1198 Posts |
Posted - 06/18/2006 : 17:06:17
|
quote: но ведь как-то он их соединяет!
Может я сейчас буду рассказывать что-то общеизвестное, но иначе не понимаю вопроса... :( В чем проблема-то? -------------------------- Во всех приводимых Вами примерах используется функция ConnectShapes. Она появилась только в Visio 2003 и позволяет соединить некоторое число селектированных шейпов. То есть задача включает две фазы: - селектировать нужные шейпы (кстати, это можно сделать и вручную); - соединить их. Строка типа ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(1), visSelect позволяет селектировать шейп с ID = 1. То есть в коллекции шейпов Shapes функцией ItemFromID ищется шейп с ID=1 и селектируется. Вторая строка селектирует другой шейп. Это, естественно не единственный способ. Если Вы другим способом зададите шейп, например, по имени Dim ShpObj As Visio.Shape Set ShpObj = ActivePage.Shapes("WWW Server") ActiveWindow.Select ShpObj, visSelect то первая задача все равно будет выполнена - шейп селектируется. Выбирать шейпы, для того, чтобы сказать "Set ShpObj = Чего-то" можно по ID, по имени, по всяким другим признакам и ли содержимому нужных ячеек шейп-листа... Например, можно выбрать последний брошенный на страницу шейп или "первый из синих квадратов, накрывающий координаты 0,5х1,5". То есть - как угодно. Строка типа Application.ActiveWindow.Selection.ConnectShapes соединяет все, что селектировано. Селектируете Вы перед этим два шейпа - соединит два. Селектируете десять - соединит десять... --------------- Классический способ соединения шейпов описан в моей статье "Внешняя программа для Visio" в библиотеке сайта http://visio.artberg.ru . Он работает во всех Visio, не требует селектирования. На рисунок опускается коннектор, затем его концы поочередно подключаются к одному и другому шейпу. |
|
|
Topic |
|
|
|