All Forums
 Категория Visio
 Форум Вопросы и ответы
 Данные
Author Previous Topic Topic Next 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  Visit Surrogate's Homepage
я бы эту задачу решил так
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
Go to Top of Page

vis

47 Posts

Posted - 03/22/2011 :  06:15:02
Спасибо, суррогат.
С программным решением - это все понятно.
А есть ли возможность при помощи стандартных средств (визардов) что-то подобное организовать?
Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 03/23/2011 :  08:23:47  Visit Surrogate's Homepage
можно - используя Add-On Database Wizard.

но сразу предупреждаю - способ весьма замороченный, из-за 10 ShapeData не стоит морочиться.

http://support.microsoft.com/kb/254591/en-us/ описано по-буржуйски

если не поможет, напишу позднее как это сделал я. сегодня напряжно со временем ....




Go to Top of Page

vis

47 Posts

Posted - 03/23/2011 :  08:33:56
посмотрим, что там буржуи пишут...
на счет 10 шейпов - это я просто пример привел...
а так может понадобится 1000 таких шейпов связать с документом Excel
Go to Top of Page

vis

47 Posts

Posted - 03/23/2011 :  11:23:53
Все разобрался...
спасибо всем....
Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 03/24/2011 :  08:53:46  Visit Surrogate's Homepage
Ну вот нашел описание как это сделать по-русски (кстати взято с этого сайта) !

http://visio.artberg.ru/biblio/visiobdexcel.htm

Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 03/29/2011 :  10:08:26  Visit Surrogate's Homepage
Народ у кого-нибудь получилось разобраться с обновлением ?

Есть такой addon - Database Settings
Tools -> Addons -> Visio Exstras -> Database settings

в нем есть галочка, что автоматическое обновление рисунка будет происходить через N секунд



у меня это обновление не происходит :(


Edited by - Surrogate on 03/29/2011 10:14:01
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 03/29/2011 :  16:23:13
Сейчас проверил.
Только на простейшей связке - с файлом Excel.
Установил период 1 мин. Изменил файл Excel. Записал.
Подождал примерно минуту - данные в шейпах обновились.
(Делал в Visio 2007)
Go to Top of Page

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
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)