Форум пользователей Visio http://visio.getbb.ru/ |
|
рисование в висио по команде из EXEL http://visio.getbb.ru/viewtopic.php?f=29&t=1046 |
Страница 3 из 6 |
Автор: | DArkadiy [ 10 ноя 2016, 20:34 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
Цитата: а ты Const pt = "c:\Users\xXx\Documents\" так и оставил ? или подставил путь к своей папке ? свой написал и Worksheets("запрос").Range("E18").Value этот тоже свойкстати у Меня ещё один вопрос как правильно обращаться к только что нарисованному шейпу, а то Я как то топорно это делаю Код: appVisio.ActiveWindow.Page.Shapes.ItemFromID(e).CellsSRC(visSectionObject, visRowFill, visFillForegnd).FormulaU = "THEMEGUARD(RGB(0,0,0))" где "е" это номер шейпа который Я считаю каждый раз когда рисую шейп, типо нарисовал квадатик е = е+1, Я понимаю что это явно не правильно, но ничего другого Я не придумал зы это прога в екселе из екселя рисует в висио и хочет сохранить результаты |
Автор: | Shishok [ 10 ноя 2016, 20:42 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
Вот так: Код: appVisio.ActiveWindow.Selection.PrimaryItem
' Или appVisio.ActiveWindow.Selection (1) |
Автор: | Surrogate [ 10 ноя 2016, 20:48 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
DArkadiy писал(а): свой написал хорошо. а папка то уже существует ? если нет. но правильно ошибку выдает!ты по прежнему шейпы по одному добавляешь ? не сделал смарт-шейпа ? если по одному то для прибавлении ID шейпа вполне корректно. а шейп объявлять так, когда рисуешь его Код: Dim sh As Shape
' ..... Set sh = appVisio.ActiveWindow.Page.DrawRectangle(1, 1, 3, 2) sh.CellsSRC(visSectionObject, visRowFill, visFillForegnd).FormulaU = "THEMEGUARD(RGB(0,0,0))" |
Автор: | Shishok [ 10 ноя 2016, 20:51 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
А правильней обращаться так: Код: Dim oSH As Object ' пишешь в начале процедуры
' Каждый раз когда рисуешь новый шейп, делай так: Set oSH = appVisio.ActivePage.DrawRectangle(1, 4, 4, 1) ' и обращайся уже к объектной переменной oSH oSH.CellsSRC(visSectionObject, visRowFill, visFillForegnd).FormulaU = "THEMEGUARD(RGB(0,0,0))" |
Автор: | DArkadiy [ 10 ноя 2016, 20:52 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
Surrogate писал(а): хорошо. а папка то уже существует ? если нет. но правильно ошибку выдает! папка существует, но не существует папки которую нужно создать с названием из ячейки |
Автор: | Surrogate [ 10 ноя 2016, 20:57 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
DArkadiy писал(а): но не существует папки которую нужно создать с названием из ячейки значит придется создавать самомуFileSystem Object в помощь ! |
Автор: | Shishok [ 10 ноя 2016, 20:58 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
http://www.script-coding.com/WSH/FileSystemObject.html#6. Код: Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("C:\") Set NewFolder = Folder.SubFolders.Add("New Folder") |
Автор: | DArkadiy [ 10 ноя 2016, 21:05 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
Код: Const pt = "F:\заказы\" cname = Worksheets("запрос").Range("E18").Value ccont = Worksheets("запрос").Range("C18").Value Set FSO = CreateObject("Scripting.FileSystemObject") FSO.CreateFolder ("F:\заказы\" & cname) pth = pt & cname ' путь к папке nm = Replace(Date, ".", "_") & ccont & ".vsd" ' имя файла vd.SaveAs pth & "\" & nm папку создал, но на последнюю строчку ругнулся и не сохранил |
Автор: | Shishok [ 10 ноя 2016, 21:21 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
А с переменной vd все нормально? как ты ей присваиваешь значение? |
Автор: | DArkadiy [ 10 ноя 2016, 21:30 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
=) Я не знаю что такое переменная vd в итоге работает вот так Код: Const pt = "F:\заказы\" cname = Worksheets("запрос").Range("E18").Value ccont = Worksheets("запрос").Range("C18").Value Set FSO = CreateObject("Scripting.FileSystemObject") If FSO.FolderExists("F:\заказы\" & cname) Then pth = pt & cname ' путь к папке nm = Replace(Date, ".", "_") & " " & ccont & ".vsd" ' имя файла Else FSO.CreateFolder ("F:\заказы\" & cname) End If appVisio.ActiveDocument.SaveAsEx pth & "\" & nm, visSaveAsWS + visSaveAsListInMRU сначала проверяет есть ли папка, если есть то создаёт файл, если нет то создаёт папку и файл теперь осталось сохранить туда же екселевский файл и всё будет хорошо |
Автор: | Shishok [ 10 ноя 2016, 21:35 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
Цитата: =) Я не знаю что такое переменная vd Вот же последняя строка твоего кода двумя комментами выше: Код: vd.SaveAs pth & "\" & nm Ну хорошо что заработало. |
Автор: | Surrogate [ 11 ноя 2016, 08:49 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
DArkadiy писал(а): Я не знаю что такое переменная vd зато я прекрасно знаю, откуда у нее ноги растут. Surrogate в сообщении #10514 писал(а): Set va = GetObject(, "visio.application") я взял код из другой ветки сегодняшнего обсуждения, там тоже управляем визио программно из под экселяSet vd = va.ActiveDocument DArkadiy писал(а): appVisio.ActiveDocument.SaveAsEx pth & "\" & nm, visSaveAsWS + visSaveAsListInMRU DArkadiy, молодец ! Растешь на глазах
|
Автор: | DArkadiy [ 11 ноя 2016, 16:58 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
Спасибо, за уже оказанную неоценимую помощь. теперь Я начинаю всё это дело прилизывать, и хочу расставлять смарт шейпы размеров из стандартного набора "размеры техника" Я видел в том мануале что то про коннекторы, но не уверен, что это именно то что нужно |
Автор: | Shishok [ 16 ноя 2016, 20:02 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
А можно без кракозябр строчку кода вставить? А то непонятно. А впрочем понятно, это имя трафарета. |
Автор: | DArkadiy [ 16 ноя 2016, 20:12 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
кракозябры это название файла по русски, это форум его коверкает. но косяк я свой нашёл, нужно быть внимательней и заменять все Application на appVisio , а то я первый заменил, а второй оставил
|
Автор: | Surrogate [ 16 ноя 2016, 20:13 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
DArkadiy писал(а): заменяю Application на appVisio в обоих случаях ? Application.ActiveWindow.Page.Drop Application.Documents.Item("Ðàçìåðû (òåõíèêà).vss").Masters.ItemU("Horizontal"), 5.07874, 124.173228 DArkadiy писал(а): кракозябры это название файла по русски, это форум его коверкает. не в форуме дело, сейчас скопировал аналогичный код содержащий кириллицу, вставил в тело письма в MS Outlook - те же крокозябры!Alex_ST в сообщении #10160 писал(а): у тебя до сих пор не пофиксен баг работы буфера обмена, возникший ещё при русификации VISTA… … Вот РАДИКАЛЬНЫЙ СПОСОБ, помогающий практически в 100% случаев избавиться от "кракозябр": Surrogate в сообщении #10164 писал(а): руки не доходят снова пройти по этому радикальному пути . обхожусь по рабоче-крестьянски - вставляю сначала код из VBA IDE в шейп Visio, а из него уже без крокозябр в любое место
|
Автор: | DArkadiy [ 16 ноя 2016, 21:03 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
Surrogate писал(а): у тебя до сих пор не пофиксен баг работы буфера обмена, возникший ещё при русификации VISTA… наверное это по тому что у меня стоит ХР... а не виста =) с изменением размеров шейпа вроде справился |
Автор: | DArkadiy [ 17 ноя 2016, 11:27 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
смартшейпы вставляются куда нужно теперь нужно изменить размер в принципе зписаный макросом и изуродованный по предыдущему принципу код работает Код: appVisio.ActiveWindow.Selection.PrimaryItem.CellsSRC(visSectionObject, visRowXForm1D, vis1DEndX).FormulaU = "627 mm" но мне нужно получить что то типо этого Код: appVisio.ActiveWindow.Selection.PrimaryItem.CellsSRC(visSectionObject, visRowXForm1D, vis1DEndX).FormulaU = (x1 + (sh_r / 25.4)) а такой уже не работает... |
Автор: | Surrogate [ 17 ноя 2016, 11:35 ] |
Заголовок сообщения: | Re: рисование в висио по команде из EXEL |
DArkadiy писал(а): но мне нужно получить что то типо этого да, обычно так не прокатывает.Код: appVisio.ActiveWindow.Selection.PrimaryItem.CellsSRC(visSectionObject, visRowXForm1D, vis1DEndX).FormulaU = (x1 + (sh_r / 25.4)) но можно ввести промежуточную переменную. вычислить ее значение и подставить в формулу. Код: dim EX as Single
… EX = (x1 + (sh_r / 25.4)) appVisio.ActiveWindow.Selection.PrimaryItem.CellsSRC(visSectionObject, visRowXForm1D, vis1DEndX).FormulaU = EX |
Страница 3 из 6 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |