Форум пользователей 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, Я понимаю что это явно не правильно, но ничего другого Я не придумал :oops:

зы это прога в екселе из екселя рисует в висио и хочет сохранить результаты

Автор:  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

:D :D :D

Вот же последняя строка твоего кода двумя комментами выше:
Код:
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

Спасибо, за уже оказанную неоценимую помощь.
теперь Я начинаю всё это дело прилизывать, и хочу расставлять смарт шейпы размеров из стандартного набора "размеры техника"
Я видел в том мануале что то про коннекторы, но не уверен, что это именно то что нужно

Автор:  DArkadiy [ 16 ноя 2016, 19:58 ]
Заголовок сообщения:  Re: рисование в висио по команде из EXEL

пытаюсь вставить смартшейп размера
записал макросом как вставляю смартшейп
Код:
    Application.ActiveWindow.Page.Drop Application.Documents.Item("Ðàçìåðû (òåõíèêà).vss").Masters.ItemU("Horizontal"), 5.07874, 124.173228


заменяю Application на appVisio
запускаю...
Изображение
очевидно, что я что то делаю не так :wall:

Автор:  Shishok [ 16 ноя 2016, 20:02 ]
Заголовок сообщения:  Re: рисование в висио по команде из EXEL

А можно без кракозябр строчку кода вставить? :D А то непонятно.
А впрочем понятно, это имя трафарета.

Автор:  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))

а такой уже не работает... :wall:

Автор:  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/