Author |
Topic |
|
prov
3 Posts |
Posted - 07/08/2006 : 00:14:53
|
Только начинаю работать в Visio. Очень нужна помощь. Как сделать чтобы при нажатие на Shape возникало окно, в котором будут отражаться данные считанны, например из текстового файла. |
|
Tumanov
Russia
1198 Posts |
Posted - 07/08/2006 : 10:43:14
|
Вообще-то, навешивания своих функций на одиночный клик лучше избегать... В Visio для подобных операций предусмотрен двойной клик. Если Вам это подходит, то: - в VBA создается формочка с окном, в котором будут отображаться считанные данные; - пишется макрос, считывающий данные из файла и передающий их в формочку; - запуск макроса через Format / Behavior / Double-Click / Run macro навешивается на шейп. Если текст совсем небольшой, то можно обойтись без формочки, а текст выводить прямо из макроса через стандартный MsgBox. А с одиночным кликом работать тяжелее. Небольшой примерчик был в topic.asp@TOPIC_ID=815.html |
|
|
prov
3 Posts |
Posted - 07/09/2006 : 23:37:41
|
А можно попросить еще помощи. Я пытался сделать то, что вы сказали, но у меня возникло несколько проблем: 1. у меня не получилось считать данные из файла и занести их в форму ( к сожалению с VBA большие сложности, пока) 2. и как сделать если к каждому Shape должен быть приклеплен свой файл. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 07/10/2006 : 10:42:40
|
1. Если с Visio еще есть какие-то проблемы с документацией, особенно по программированию, то с VBA таких проблем уже давно не существует. Простейший способ разобраться - купить книжку и прочитать... 2. Можно либо заносить имя файла непосредственно в шейп (например, в Custom Properties или User-defined), или в специальный массив, связывающий имя шейпа с именем файла. Это уж надо выбирать, что удобнее для Вашего решения. Макрос прочитает имя файла и возьмет из него данные. Макрос будет выглядеть примерно так (это без обработки ошибок, форматирования и т.д.)
Sub ttt() Dim Sh As Visio.Shape Dim CellObj As Visio.Cell Set Sh = ActiveWindow.Selection(1) Set CellObj = Sh.Cells("Prop.Fil") InFile = ActiveDocument.Path & "\" & Replace(CellObj.Formula, Chr(34), "") Dim fso As New FileSystemObject Dim ts As TextStream Set ts = fso.OpenTextFile(InFile) s = ts.ReadAll ts.Close UserForm1.TextBox1 = s UserForm1.Show (1) Unload (UserForm1) End Sub
Комментарии: По двойному клику шейп будет селектирован, значит его можно вычислить через объект Selection. Из шейпа берется ячейка Custom Properties с именем Fil, в которую предварительно должно быть записано имя файла с данными. К имени надо добавить путь. Если файл с данными лежит в той же папке, что рисунок, то путь будет вычисляться через ActiveDocument.Path. Из строки с именем нужно убирать лишние кавычки (Replace). Данные из файла читаются в одну строку функцией ReadAll объекта TextStream. Затем эта строка передается в TextBox на форме. Форма высвечивается функцией Show и убирается функцией Unload. Примечание. Чтобы работал FileSystemObject нужно к проекту через References присоединить Microsoft Scripting Runtime. |
|
|
prov
3 Posts |
Posted - 07/11/2006 : 16:00:43
|
Большое спасибо за помощь. |
|
|
|
Topic |
|
|
|