Microsoft Word VBA pos меняется? - PullRequest
0 голосов
/ 01 ноября 2018

Так что я пытался сделать макрос для Microsoft Word в последнее время для развлечения, но я наткнулся на некоторое препятствие. То, что я пытаюсь сделать, это на самом деле просто покрыть всю страницу фигурами, но не перекрывать их. В настоящее время формы просто заканчиваются прямой линией между верхним левым и нижним правым углами, нигде больше, и постоянно перекрываются. Мне было интересно, есть ли способ выполнить фигуры на всей странице, не перекрывая друг друга? Мой сценарий:

Sub Wait(n As Long)
    Dim t As Date
    t = Now
    Do
        DoEvents
    Loop Until Now >= DateAdd("s", n, t)
End Sub

Sub Pause()
    Wait 0.1
End Sub

Sub Test()
    Dim shpCanvas As Shape
    Dim shpCanvasShapes As CanvasShapes
    Dim shpCnvItem As Shape

    ShapeSize = 250 * Rnd() + 250
    Set shpCanvas = ActiveDocument _
                    .Shapes.AddCanvas(Left:=ShapeSize, Top:=ShapeSize, _
                                      Width:=50, Height:=75)
    Set shpCanvasShapes = shpCanvas.CanvasItems

    With shpCanvasShapes
        .AddShape Type:=msoShapeIsoscelesTriangle, _
                  Left:=0, Top:=0, Width:=50, Height:=50
        .AddShape Type:=msoShapeOval, _
                  Left:=10, Top:=25, Width:=30, Height:=10
        .AddShape Type:=msoShapeOval, _
                  Left:=20, Top:=25, Width:=10, Height:=10
    End With
    Pause
End Sub

Спасибо большое, Ксандер

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вам нужен лучший алгоритм. Причина, по которой они начинаются в верхнем левом углу и переходит в нижний правый, заключается в следующей строке кода:

.Shapes.AddCanvas(Left:=ShapeSize, Top:=ShapeSize, _
                                      Width:=50, Height:=75)

В приведенном выше примере вы устанавливаете Left, пропорциональный Top (в данном случае фактически равный, поскольку вы используете ShapeSize каждый раз), поэтому существует линейная функция.

Вы можете прогрессировать со случайностью генерации фигуры, или вы можете случайным образом выбрать пробел на странице (основываясь на вашей случайности на оставшемся месте, а не на всей странице), а затем вписать в нее одну из ваших случайных фигур. пространство.

Я оставлю это в качестве упражнения для себя при кодировании этого алгоритма, но его не должно быть слишком сложно генерировать.

0 голосов
/ 02 ноября 2018

Вот идея, но это может быть нелегко кодировать. Определите массив размером 34 на 44 или одно значение для каждого квадрата на четверть дюйма на странице. Начните с массива, заполненного False.

Генерация случайной формы и случайной позиции. Вычислите, какие квадратные дюймы будут покрывать фигуры. Проверьте, есть ли в массиве значение False для всех этих квадратов.

  • Если все ложно, добавьте фигуру в документ Word. Поместите Истинные значения в массив для каждого квадрата на четверть дюйма, который покрыт формой.

  • Если любое из них истинно, создайте другую фигуру и повторите тест.

Остановить макрос, когда 100 фигур были сгенерированы без добавления в документ Word.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...