Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 29 мар 2024, 17:47

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Чтение Екселя из Визио.
СообщениеДобавлено: 15 май 2012, 03:29 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 12 май 2012, 15:16
Сообщений: 122
Очков репутации: 13

Добавить очки репутацииУменьшить очки репутации
С тхт файлами как-то проблемы не возникло, а тут вообще не знаю как подступиться...
Есть файл Екселя, в котором имеются 2 интересующих меня столбца...
в ходе выполнения Sub gg()на визио нужно влезть в Ексель, найти в столбце "А" значение равноепеременной и вернуть мне значение из этой строки в стоьбце "В"...
был найдет код

Код:
Dim ExcelObject As Object
Set ExcelObject = CreateObject("Excel.Application")
Dim Stolb As Range


ExcelObject.Workbooks.Add
ExcelObject.Workbooks.Open FileName:="C:\Users\1\Desktop\2012.xlsx"
ExcelObject.Visible = True

ExcelObject.Range("A1", "A1").Value = "Значение"
ExcelObject.Range("A1", "A1").HorizontalAlignment = 1
ExcelObject.Range("A1", "A1").VerticalAlignment = 2
ExcelObject.Range("A1", "A1").WrapText = 1


который вселил в меня надежду, что это возможно... но переделать его я так и не смог... Где тут цели, можно ли финд запустить? Вообще всё как-то не складывается в моём мозгу....


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Чтение Екселя из Визио.
СообщениеДобавлено: 15 май 2012, 05:17 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 12 май 2012, 15:16
Сообщений: 122
Очков репутации: 13

Добавить очки репутацииУменьшить очки репутации
в общем мне нужно в Визио запустить следующий код Екселя:

Код:
Dim f As Excel.Range

  Set f = [A:A].Find("город", , xlValues, xlWhole)
 
X = Range(f.Offset(0,1), f.Offset(0,1))

Всё... всего три (почти 2) строки написанные на родном ему VBA и куча мата с монитора...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Чтение Екселя из Визио.
СообщениеДобавлено: 15 май 2012, 10:16 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
можно уточнение: в столбец В копируется все содержимое столбца А или только удовлетворяющее условию Find ?

Если второе, то не проще найденные значения просто заносить в массив ?

обрисуйте, что должен в общих чертах делать макрос и мне будет проще помочь :)

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Чтение Екселя из Визио.
СообщениеДобавлено: 15 май 2012, 17:20 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 12 май 2012, 15:16
Сообщений: 122
Очков репутации: 13

Добавить очки репутацииУменьшить очки репутации
Они в массив заноситься и будут ;)
можно в массив весь лист екселя занести, это был план "А", хотя и совсем не экономичный: екселька большааая, а мне нужны из нее 2-6 значений... только у меня не вышло: я только тхт файлы умею :roll:
На ексели он ругается что конец не виден.
Сами же переменные совсем не обязательно...
Описать попробую.
Код:
Dim NomP As Byte, Data (10) As String, I As Byte, Poisk As String

NomP = TextBox1
I = 1
' если NomP > 1 то вводимых пользователем данных не достаточно и их нужно вытащить из екселя
' для этого и запускаем цикл (если NomP = 1, то он не запустится) *смайлик КО*
' хотя если цикл запустится, смайлик уберу и внесу цикл в Иф.
             For X = 1 To NomP
Poisk = "что-то" & X ' тут генерируется искомое в екселе по столбцу "А" значение
бла-бла-бла    ' тут лезем в ексель и включаем финд
Data (I) = Range(f.Offset(0,1), f.Offset(0,1)) '  Data (I) берется из столбца "В" строки, где нашёлся Финдом Poisk


I= I+1
             Next X

Далее массив Data (I) будет раздавать переменные шейпам в цикле от 1 до накрученного Х
Рассмотрю и другие варианты
ЗЫ. Вероятны синтаксические ошибки в коде, поскольку сочинял прямо тут


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Чтение Екселя из Визио.
СообщениеДобавлено: 15 май 2012, 18:22 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
код из под экселя. на сегодня лень адаптировать запуск макроса из под visio ;)

Код:
Option Base 1           ' массив начинается с 1, а не с 0 по умолчанию
Sub Макрос1()
Dim i As Integer        ' счетчик количества совпадений
i = 0
Dim x As Integer
Dim rw As Integer       ' количество строк таблицы
'rw = 100
Dim data(100) As String ' определение массива, я взял макксимальный предел 100
Range("A1").Select      ' выделяем ячейку А1
Range(Selection, Selection.End(xlDown)).Select
' выделяем диапазон до последней заполненной строки в первом столбце
rw = Range(Selection, Selection.End(xlDown)).Count
' получаем количество выделенных строк
Dim cl As Range         ' определяем текущую ячейку из первого столбца
For x = 1 To rw        ' цикл перебора строк таблицы
Set cl = Cells(x, 1)   ' присваиваем значение переменной cl ячейке в строке xx первого столбца
If cl.Value = "город" Then ' проверка условия
i = i + 1                   ' приращение счетчика совпадения условия
data(i) = cl.Offset(0, 1)   ' заполнение массива
Else
End If
Next x                   ' переход к следующей строке
MsgBox "TheEnd"             ' сообщение об окончании работы
End Sub                     ' конец


Если не получится своими силами, отпишись завтра продолжу :)

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Чтение Екселя из Визио.
СообщениеДобавлено: 15 май 2012, 19:23 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 12 май 2012, 15:16
Сообщений: 122
Очков репутации: 13

Добавить очки репутацииУменьшить очки репутации
Я же по этому поводу сюда и пришёл...
У меня вообще они не адаптируются... Пример адаптации моей предыдущей записи было бы хорошо, но если в угоду лени дадите просто наставления по адаптации, тоже было бы не плохо.
Макрос запускать нужно именно из под визио...
По остальному... Код екселя менять не стоит.
Количество совпадений всегда будет равно 1. Поисковые запросы будут генерироватсья поиском.
Прям конкретно задача:
Ексель: "А" - маркировка кабеля распределительной сети, "В" - адрес, куда он отходит.
А | В
345-456-Р-01 |Светлая ул. д 14
345-456-Р-02 |Молодёжная ул. д 3
345-456-Р-03 |Весенняя ул. д 17
345-460-Р-01 |Вишнёвая ул. д 5
..........

Если вводится в ТекстБокс3 456, а в ТекстБокс1 4, то значит что кабель 345-456 выходящий из оборудования, установленное в доме по адресу ул. Гагарина д3. идёт не только в этот дом, но и в 3 других ( в этом доме он начнётся с 345-456-Р-04 (тестбокс1))... Это нужно показать на чертеже, рисуемом полностью автоматически с помощью макрокса... есть подготовленные шейпы с установленными координатами, которые уже вляпываются на чертёж, но что бы их заполнить нужно залезть в ексель... теоретически это мог бы делать пользователь и вводить данные в текст боксы, но это приведёт к большЕму количеству ошибок и увеличит время "проектирования". В утопичном идеале человека следует отстранить от процесса вообще)))
поэтому, когда прога видит, что
Код:
NomP > 1 ' текстбокс1

то есть Р-04, к примеру, она начинает генерировать запросы
Код:
For X = 1 To NomP
Poisk = "345-456-Р-0" & X ' тут генерируется искомое в екселе по столбцу "А" значение
Data (I) = Range(f.Offset(0,1), f.Offset(0,1)) '  Data (I) берется из столбца "В" строки, где нашёлся Финдом Poisk
I= I+1
             Next X

находит в екселе каждый кабель, возвращает адреса а потом ставит шейпы в цикле, принтя эти адреса в чертёж.
Код:
Set stnObj = Documents("кабель.vss")
Set mastkab = stnObj.Masters("kab")
I=1
For For X = 1 To NomP               
Set shpkab = ActivePage.Drop(mastkab, NKblocX , NKEty + dY  * (X-1))
shpkab.Text = Data (I)
I=I+1
Next X


На самом деле тут многое осталось недосказанным, так как макрокс одним кликом делает весь проект, разнося, беря и вычисляя данные с нескольких страниц (пейджей), принтит и читает тхт файл. Код в печатном виде уже перевалил за 40 стр... поэтому принципиально отличающиеся вводимые и возвращаемые данные невозможны, да и не отвечают поставленной задаче.
Про другие варианты я имел в виду, если невозможно запустить финд из визио, может тогда залезть в ексель и как-то весь его засунуть в массив... но он достаточно большой...
Может из визио открыть ексель, запустить программно саб в екселе, который потом спринтит необходимые данные в тхт файл на сервере, потом узнать программно из визио, что файл готов, открыть его и уже его загнать в массив...
Остальные "может" в моём мозгу всплывают и вовсе космические...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Чтение Екселя из Визио.
СообщениеДобавлено: 16 май 2012, 00:42 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
я то думал, что у тебя таблица из 2-3 столбцов. а тут целая симфония :)

2 года я тоже делал, что-то подобное использую add-on Database Wizard. с помощью этого визарда у меня была подключена таблица, содержащая сотни строк и 46 столбцов. В моем случае выборка осуществлялась по уникальному идентификационному номеру узла. Извлекались адреса, места расположения оборудования, данные по принадлежности к территориальным управлениям, сетевые параметры и п.д. Также вставлялись заранее подготовленные планы расположения оборудования и фасады телекоммуникационных шкафов. Еще вставлялись текстовые конфигурационные файлы их тхт-файла
Так что с проектами выпускаемыми практически без участия человека я знаком :)

Насколько я помню, там даже не было кода VBA. Если и был, то никак не на 40 листов…

завтра поищу тот проект. там все намного проще было реализовано, никаких многочисленных файндов не было.
я в личку кину свой почтовый адрес, кинь табличку или ее часть на почту

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Чтение Екселя из Визио.
СообщениеДобавлено: 16 май 2012, 23:54 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
таблицу получил. к сожалению не смог найти старый файл, использованием Database Wizard :(
пытаюсь восстановить по памяти

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Чтение Екселя из Визио.
СообщениеДобавлено: 17 май 2012, 06:38 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 12 май 2012, 15:16
Сообщений: 122
Очков репутации: 13

Добавить очки репутацииУменьшить очки репутации
я тоже пытаюсь)))
Тут целая команда над вопросом работает)))


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Чтение Екселя из Визио.
СообщениеДобавлено: 17 май 2012, 06:42 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 14 май 2012, 00:07
Сообщений: 150
Использую Visio c: 2012
Отрасль: Связь
Должность: Ведущий инженер
Уровнь квалификации: Vba, Vb, Java, Java Script
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
команда)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Чтение Екселя из Визио.
СообщениеДобавлено: 17 май 2012, 11:48 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
вот здесь про сам визард написано. http://visio.artberg.ru/biblio/visiobdexcel.htm
за сегодня постараюсь закончить примитивный пример

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Чтение Екселя из Визио.
СообщениеДобавлено: 17 май 2012, 18:36 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
вот что получилось:

Мануал


Исходники

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Чтение Екселя из Визио.
СообщениеДобавлено: 18 май 2012, 00:12 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 12 май 2012, 15:16
Сообщений: 122
Очков репутации: 13

Добавить очки репутацииУменьшить очки репутации
:shock:
До сих пор моя автоматизация визио сводилась к трём вышеупомянутым строчкам и знаниям VB и понятиям VBA Excel... Мастер класс, продемонстрированный Вами на первый взгляд можно отнести к шаманству, но если присмотреться, то становится очевидно, что тут использована именно специфика Визио... рад буду в этом разобраться, возможно тогда и не потребуется 40 стр кода))).
Тем не менее после такого шокирующего решения проблемы, думаю тему закрывать пока рано: могут возникнуть вопросы в освоении мануала.
Спасибо огромное.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Чтение Екселя из Визио.
СообщениеДобавлено: 18 май 2012, 10:44 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
в принципе можно все это и из под экселя загнать в визио.
количество страниц кода будет зависеть от числа параметров передаваемых в визио.
недавно загонял ~30 полей экселя в визио, код был страницы четыре. данные с разных
листов экселя можно агрегировать в нужную таблицу средствами самого экселя…

вопросы будут обращайтесь :)

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB