Как автоматически расположить фигуры, автоматически нарисованные петлей? - PullRequest
0 голосов
/ 11 июля 2019

У меня есть цикл, который автоматически генерирует прямоугольники на чертеже Visio, но мне нужен сценарий для их автоматической компоновки. Я знаю, что записал макрос, когда я переставлял прямоугольники вручную под полем заголовка.Но количество моих прямоугольников постоянно меняется, потому что результаты моего оператора if постоянно меняются, потому что мои данные постоянно меняются.Мне нужно, чтобы мой цикл начал рисовать их под полем заголовка в столбцах из шести или семи прямоугольников.

For I = 1 To WS_Count

Set vsoShape = 
Application.ActiveWindow.Page.Drop(Application.DefaultRectangleDataObject, 
aoffset, boffset)

vsoShape.Text = ActiveWorkbook.Worksheets(I).Name


aoffset = aoffset

boffset = boffset + 0.75

Dev_Count = Dev_Count + 1


ActiveDocument.DiagramServicesEnabled = DiagramServices

   Next I

Мне нужно иметь возможность установить начальную позицию, чтобы начать сбрасывать прямоугольники под прямоугольником заголовка, создаваяновый столбец каждые шесть-семь прямоугольников.Спасибо

1 Ответ

0 голосов
/ 19 июля 2019

Увеличивать aOffset каждый раз, когда I делится на количество фигур, которые вы хотите по горизонтали ...

Это можно сделать с помощью оператора Mod If (iterator Mod runEveryXIterations = 0) Then ...

Пример ниже должен прояснить идею, код не совсем то, что вам нужно, но вы должны быть в состоянии понять идею:

Option Explicit

Public Sub printXY()
    xyDistribute 10, 3, 0, 0, 0.75, 1.5
End Sub

Private Function xyDistribute(ByRef iterations As Long, _
                              ByRef newColAfter As Long, _
                              ByRef xPosInitial As Double, _
                              ByRef yPosInitial As Double, _
                              ByRef xStep As Double, _
                              ByRef yStep As Double)
    Dim iter As Long
    Dim xPos As Double
    Dim yPos As Double

    yPos = yPosInitial
    xPos = xPosInitial

    Debug.Print "xPos", "yPos"

    For iter = 1 To iterations

        Debug.Print xPos, yPos
        ' your code goes here

        If (iter Mod newColAfter = 0) Then
            yPos = yPos + yStep
            xPos = xPosInitial
        Else
            xPos = xPos + xStep
        End If

    Next iter

End Function
...