Author |
Topic |
|
vis
47 Posts |
Posted - 03/11/2011 : 11:36:08
|
Господа. Я не спец в компьютерной технике, но шаг за шагом и с большим интересом изучаю Визио и программирование в нем. Просьба не закидывать камнями, а подробно ответить и объяснить на пальцах.
Имеется шейп с десятью ShapeData, пусть они называются ShD1, ShD2..ShD10. Задача. Имея "базу данных" - столбец из десяти ячеек с числами в Microsoft Excel, необходимо как-то связать эту "базу данных" с десятью ShapeData шейпа таким образом, чтобы при изменении в Excele чисел в этом столбце ("базе данных"), менялись бы значения ShapeData на эти же. Я подумал, что это можно решить при помощи "СВЯЗАТЬ ДАННЫЕ С ФИГУРАМИ". Что-то не получилось или вообще я неправильное направление выбрал. Поиском весь форум перелазил. Нашел подобную тему. topic.asp@TOPIC_ID=874.html но что-то не смог опять решить задачу.
Помогите, пожалуйста. Visio2007 |
|
Surrogate
Russia
122 Posts |
Posted - 03/11/2011 : 12:56:04
|
я бы эту задачу решил так http://narod.ru/disk/7273641001/XLS_import.vsd.html
Надо обязательно подключить библиотеку для работы с Excel - для этого, нужно в меню Tools -> References найти эту библиотеку (В моем случае для Visio 2003 (ENG))
Sub look_xls()
Set c1 = CreateObject("Excel.Application")
Set w1 = c1.Workbooks.Open("d:\00\065\test.xls")
For x = 1 To 10
txt = Cells(x, 1).Text
txt = Chr(34) & txt & Chr(34)
ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(x), visSelect
Dim vsoCharacters2 As Visio.Characters
Set vsoCharacters2 = Application.ActiveWindow.Selection.Item(x).Characters
vsoCharacters2.Begin = 0
vsoCharacters2.End = 0
vsoCharacters2.AddCustomFieldU txt, 0
Application.ActiveWindow.Selection.Item(x).CellsSRC(visSectionCharacter, 0, visCharacterLangID).FormulaU = 1033
Next x
MsgBox "TheEnd"
End Sub
в строке Set w1 = c1.Workbooks.Open("d:\00\065\test.xls"), укажите путь к своему файлу Эксель.
† |
Edited by - Surrogate on 03/11/2011 13:03:18 |
|
|
vis
47 Posts |
Posted - 03/22/2011 : 06:15:02
|
Спасибо, суррогат. С программным решением - это все понятно. А есть ли возможность при помощи стандартных средств (визардов) что-то подобное организовать? |
|
|
Surrogate
Russia
122 Posts |
Posted - 03/23/2011 : 08:23:47
|
можно - используя Add-On Database Wizard.
но сразу предупреждаю - способ весьма замороченный, из-за 10 ShapeData не стоит морочиться.
http://support.microsoft.com/kb/254591/en-us/ описано по-буржуйски
если не поможет, напишу позднее как это сделал я. сегодня напряжно со временем ....
† |
|
|
vis
47 Posts |
Posted - 03/23/2011 : 08:33:56
|
посмотрим, что там буржуи пишут... на счет 10 шейпов - это я просто пример привел... а так может понадобится 1000 таких шейпов связать с документом Excel |
|
|
vis
47 Posts |
Posted - 03/23/2011 : 11:23:53
|
Все разобрался... спасибо всем.... |
|
|
Surrogate
Russia
122 Posts |
|
Surrogate
Russia
122 Posts |
Posted - 03/29/2011 : 10:08:26
|
Народ у кого-нибудь получилось разобраться с обновлением ?
Есть такой addon - Database Settings Tools -> Addons -> Visio Exstras -> Database settings
в нем есть галочка, что автоматическое обновление рисунка будет происходить через N секунд
у меня это обновление не происходит :(
† |
Edited by - Surrogate on 03/29/2011 10:14:01 |
|
|
Tumanov
Russia
1198 Posts |
Posted - 03/29/2011 : 16:23:13
|
Сейчас проверил. Только на простейшей связке - с файлом Excel. Установил период 1 мин. Изменил файл Excel. Записал. Подождал примерно минуту - данные в шейпах обновились. (Делал в Visio 2007) |
|
|
vis
47 Posts |
Posted - 03/30/2011 : 08:11:15
|
Surrogate у меня тоже не обновляет (Visio 2007)
я пользуюсь макросом, подсмотренном где-то на этом форуме
Sub Macro1()
Dim shp As Shape
Dim s As Page
Application.AlertResponse = 1
Set s = ActivePage
For i = 1 To ActiveDocument.Pages.Count
Application.ActiveWindow.Page = Application.ActiveDocument.Pages(i)
On Error Resume Next
ActiveWindow.SelectAll
On Error GoTo 0
For Each shp In ActiveWindow.Selection
If shp.CellExists("User.ODBCConnection", 0) Then
shp.Cells("EventDblClick").Formula = "RUNADDON(""DBR"")"
shp.Cells("EventDblClick").Trigger
End If
Next
ActiveWindow.DeselectAll
Next
Application.ActiveWindow.Page = s
Application.AlertResponse = 0
End Sub
|
|
|
|
Topic |
|