Форум пользователей 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 писал(а): Или так: Я упустил из виду что речь идет о ячейке EndX. По умолчанию единица измерения в визио дюйм. Код: = Str( (x1 + (sh_r / 25.4))) & " mm" надо или как предлагал 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: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 |
да, спасибо |
Автор: | 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 |
пока кода нет, думаю делать цикл в котором в массив писать номера шейпов, потом выделять шейпы из массива и группировать, но как это реализовать на практике, я ещё не придумал |
Автор: | 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/ |