Форум пользователей Visio
http://visio.getbb.ru/

рисование в висио по команде из EXEL
http://visio.getbb.ru/viewtopic.php?f=29&t=1046
Страница 4 из 6

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

Или так:
Код:
= Str( (x1 + (sh_r / 25.4))) & " mm"

Автор:  Surrogate [ 17 ноя 2016, 11:50 ]
Заголовок сообщения:  Re: рисование в висио по команде из EXEL

ИзображениеСемен Семеныч !
Surrogate писал(а):
Код:
EX = (x1 + (sh_r / 25.4))
appVisio.ActiveWindow.Selection.PrimaryItem.CellsSRC(visSectionObject, visRowXForm1D, vis1DEndX).FormulaU = EX

Так и только так !
Shishok писал(а):
Или так:
Код:
= Str( (x1 + (sh_r / 25.4))) & " mm"
Я упустил из виду что речь идет о ячейке EndX. По умолчанию единица измерения в визио дюйм.
надо или как предлагал Shishok делать формулу содержащую единицу измерения. Либо вести все расчеты в дюймах, но для нас это конечно дико

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

Вот вариант еще:
Код:
Dim EX As Single

EX = (x1 + (sh_r / 25.4))
appVisio.ActiveWindow.Selection.PrimaryItem.CellsSRC(visSectionObject, visRowXForm1D, vis1DEndX).Result(visDrawingUnits) = EX

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

Surrogate писал(а):
но можно ввести промежуточную переменную. вычислить ее значение и подставить в формулу.

он говорит, что нельзя :cry:
Изображение

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

хотел приложить набор, но vss запрещено ...

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

Варианты выше пробовал?

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

Эта ошибка означает что ты хочешь вставить в ячейку значение с десятичной запятой. А надо с точкой!

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

Код:
Str( (x1 + (sh_r / 25.4))) & " mm"

вот этот работает

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

хочу к картинке описание сделать
тоже из данных ячеек
Код:
    appVisio.ActiveWindow.Page.DrawRectangle 9.84252, 185.03937, 43.307087, 165.354331
    appVisio.ActiveWindow.Selection.PrimaryItem.Characters.Text = "высота " & Str(Worksheets("запрос").Range("F3").Value) & " мм"


в общем с цифрами проблем нет, а для текста
Код:
Str(Worksheets("запрос").Range("F3").Value)
не катит, явно нужно Str на что то заменить.

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

В данном случае Str() не надо. Это не вставка формулы в ячейку.

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

Если вставляешь в текст шейпа строку то ничего не надо:
Это получается строка - "высота " & 45 & " mm"
А если вставляешь чистое значение, то Str() - обязательно.

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

:oops:
да, спасибо

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

Есть еще одна тонкость (это относится к VBA, а не к Visio).
Дробное числовое значение обернутое в функцию Str() дает всегда в результате десятичный разделитель - точку.
А если надо все таки запятую, то можно делать так:
Код:
Dim v As String
v = 34.567  ' результат - строка "34,567"
' или, пограмотнее:
ActiveWindow.Selection.PrimaryItem.Characters.Text = CStr(23.45)

Вероятно эти разделители еще зависят от настроек Windows ('Региональные Стандарты' или 'Язык и Региональные Стандарты')

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

добрый день, товарищи, продолжаю измываться над визио из екселя.
подскажите как по умному сделать: внутри цикла рисую по очереди 3 объекта и хочу их группировать (так как по логике они составляют одну деталь), что бы потом когда в висио начну двигать, что бы не нужно было их выделять и группировать в ручную.
как это сделать без геморроя?

Автор:  Surrogate [ 23 дек 2016, 17:49 ]
Заголовок сообщения:  Re: рисование в висио по команде из EXEL

DArkadiy писал(а):
внутри цикла рисую по очереди 3 объекта и хочу их группировать (так как по логике они составляют одну деталь)
и в чем геморрой ? давай сюда код которым ты все это делаешь !
DArkadiy писал(а):
что бы потом когда в висио начну двигать, что бы не нужно было их выделять и группировать в ручную.
двигать в визио будешь уже руками ?

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

пока кода нет, думаю делать цикл в котором в массив писать номера шейпов, потом выделять шейпы из массива и группировать, но как это реализовать на практике, я ещё не придумал :oops:

Автор:  Surrogate [ 26 дек 2016, 12:04 ]
Заголовок сообщения:  Re: рисование в висио по команде из EXEL

DArkadiy писал(а):
пока кода нет
ну если так хочется сделать это кодом. а не так как я советовал
Surrogate в сообщении #10120 писал(а):
а зачем все это делать программно ? проще создать смарт-шейп, внешний вид которого можно изменять меняя поля в shape data !
придется генерить каждый раз одно и тоже !
Surrogate в сообщении #1688 писал(а):
Данный макрос формирует таблицу из 30 строк и 9 столбцов, где каждая строка это группа из 9 шейпов
вместо того, чтоб уже готовому смарт-шейпу сообщить как он должен выглядеть в этот раз
Дополнено позднее:
Код:
Set rw = ActiveWindow.Shape.DrawRectangle(0, 0, 0, 0) ' рисуем прямоугольник нулевой ширины и высоты
ActiveWindow.Selection.ConvertToGroup ' преобразуем шейп в группу
rw.OpenDrawWindow.Activate ' входим внутрь данной группы
Set ooo = ActiveWindow
For x = 1 To 9 ' начинаем заполнять строку шейпами-столбцами
tx = xc(x - 1) ' левая координата прямоугольника
bx = xc(x) ' правая нижняя координата прямоугольника
ty = 0 + rh * (y - 1) ' нижняя координата прямоугольника
by = 0 + rh * (y) ' верхняя координата прямоугольника
Set rect = ooo.Shape.DrawRectangle(tx, ty, bx, by) ' рисуем прямоугольник с полученными ранее координатами
Next x
ooo.Close
Application.ActiveWindow.Selection.UpdateAlignmentBox ' производим выравнивание размеров группы, в соответствии с размерами дочерних шейпов
в вышеуказанном коде я выбросил все лишнее оставил лишь одну суть:
1. Рисуется родительский шейп
2. Родительский шейп конвертируется в группу
3. Открываем группу и внутри нее добавляем шейпы
4. Закрываем группу и выполняем обновление размеров рамки выравнивания фигуры (Update alignment box)

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

ну я начал делать что то из примеров выше
Код:
Dim arrBal(1 To 3) As Object
...
Set arrBal(1) = appVisio.ActiveWindow.Page.DrawRectangle(xb1, yb1, xb2, yb2)  'балка
       arrBal(1).CellsSRC(visSectionObject, visRowFill, visFillPattern).FormulaForceU = "USE(""балка"")" 'заливка
Set arrBal(2) = appVisio.ActiveWindow.Page.DrawRectangle(xb1 - 23 / 25.4, yb1 - 37 / 25.4, xb1 + 21 / 25.4, yb1 + 108 / 25.4)         'раскос левый
       appVisio.ActiveWindow.Selection.PrimaryItem.CellsSRC(visSectionObject, visRowLine, visLinePattern).FormulaU = "0"
       appVisio.ActiveWindow.Selection.PrimaryItem.CellsSRC(visSectionObject, visRowFill, visFillPattern).FormulaForceU = "USE(""зацеп левый"")" 'заливка

     appVisio.Select arrBal(1).CellsSRC, visSelect' так я пытаюсь выделить но это не работает
     appVisio.Select arrBal(2)
'     appVisio.Select Application.ActiveWindow.Page.Shapes.ItemFromID(29), visSelect ' так висио при записи макроса выделяет
     appVisio.Selection.Group
я точно делаю что то не так

Автор:  Surrogate [ 26 дек 2016, 12:54 ]
Заголовок сообщения:  Re: рисование в висио по команде из EXEL

DArkadiy писал(а):
appVisio.Select arrBal(1).CellsSRC, visSelect' так я пытаюсь выделить но это не работает
подчеркнутый фрагмент явно лишний !

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

Surrogate писал(а):
подчеркнутый фрагмент явно лишний !

к сожалению его удаление не влияет на результат...

Страница 4 из 6 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/