Случайное изменение положения фигуры - PullRequest
0 голосов
/ 08 мая 2020
If AnswerOrder(0) = 1 Then
ActivePresentation.Slides(3).Shapes("a1").Left = 303
ActivePresentation.Slides(3).Shapes("a1").Top = 218
ElseIf AnswerOrder(0) = 2 Then
ActivePresentation.Slides(3).Shapes("a1").Left = 303
ActivePresentation.Slides(3).Shapes("a1").Top = 290
ElseIf AnswerOrder(0) = 3 Then
ActivePresentation.Slides(3).Shapes("a1").Left = 303
ActivePresentation.Slides(3).Shapes("a1").Top = 361
ElseIf AnswerOrder(0) = 4 Then
ActivePresentation.Slides(3).Shapes("a1").Left = 303
ActivePresentation.Slides(3).Shapes("a1").Top = 432
End If

If AnswerOrder(1) = 1 Then
ActivePresentation.Slides(3).Shapes("a2").Left = 303
ActivePresentation.Slides(3).Shapes("a2").Top = 218
ElseIf AnswerOrder(1) = 2 Then
ActivePresentation.Slides(3).Shapes("a2").Left = 303
ActivePresentation.Slides(3).Shapes("a2").Top = 290
ElseIf AnswerOrder(1) = 3 Then
ActivePresentation.Slides(3).Shapes("a2").Left = 303
ActivePresentation.Slides(3).Shapes("a2").Top = 361
ElseIf AnswerOrder(1) = 4 Then
ActivePresentation.Slides(3).Shapes("a2").Left = 303
ActivePresentation.Slides(3).Shapes("a2").Top = 432
End If

If AnswerOrder(2) = 1 Then
ActivePresentation.Slides(3).Shapes("a3").Left = 303
ActivePresentation.Slides(3).Shapes("a3").Top = 218
ElseIf AnswerOrder(2) = 2 Then
ActivePresentation.Slides(3).Shapes("a3").Left = 303
ActivePresentation.Slides(3).Shapes("a3").Top = 290
ElseIf AnswerOrder(2) = 3 Then
ActivePresentation.Slides(3).Shapes("a3").Left = 303
ActivePresentation.Slides(3).Shapes("a3").Top = 361
ElseIf AnswerOrder(2) = 4 Then
ActivePresentation.Slides(3).Shapes("a3").Left = 303
ActivePresentation.Slides(3).Shapes("a3").Top = 432
End If

If AnswerOrder(3) = 1 Then
ActivePresentation.Slides(3).Shapes("a4").Left = 303
ActivePresentation.Slides(3).Shapes("a4").Top = 218
ElseIf AnswerOrder(3) = 2 Then
ActivePresentation.Slides(3).Shapes("a4").Left = 303
ActivePresentation.Slides(3).Shapes("a4").Top = 290
ElseIf AnswerOrder(3) = 3 Then
ActivePresentation.Slides(3).Shapes("a4").Left = 303
ActivePresentation.Slides(3).Shapes("a4").Top = 361
ElseIf AnswerOrder(3) = 4 Then
ActivePresentation.Slides(3).Shapes("a4").Left = 303
ActivePresentation.Slides(3).Shapes("a4").Top = 432
End If

Должен быть лучший способ выполнить этот макрос вместо написания такого количества строк. Есть предложения?

Контекст: я пытаюсь случайным образом перемешать порядок четырех фигур, представленных на слайде 3. Я создаю массив с именем AnswerOrder, содержащий 1,2,3,4. Я перемешиваю массив, а затем выполняю приведенный выше код.

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Извините, у меня под рукой нет PowerPoint, но я написал образец кода в Excel, надеюсь, это поможет немного сократить код и сделать его более удобным в обслуживании.

Идея состоит в том, чтобы извлечь код, который устанавливает положение фигуры для отдельной подпрограммы, а в основной подпрограмме перебирает AnswerOrder и вызывает эту подпрограмму для указанных фигур.

Public Sub set_shapePosition(determinant As Long, shp As Shape)
    ' can also put shp.Left = 303 here
    Select Case determinant
        Case 1
            shp.Left = 303
            shp.Top = 218
        Case 2
            shp.Left = 303
            shp.Top = 290
        Case 3
            shp.Left = 303
            shp.Top = 361
        Case 4
            shp.Left = 303
            shp.Top = 432
    End Select
    ' Also shape Top is around 71 pixels different to one and another,
    ' We can write below code for simpler implementation
    ' Getting rid of select case statement:
    ' shp.Top = 218 + 71 * (determinant - 1)
End Sub

Public Sub main()
    ' Define slide here.....
    Set slide = ActivePresentation.Slides(3)

    ' ...Define and shuffle AnswerOrder here.......
    '
    ' .............................................

    For i = LBound(AnswerOrder) To UBound(AnswerOrder)
        Call set_shapePosition(AnswerOrder(i), slide.Shapes("a" & i+1) )
    Next i
End Sub
0 голосов
/ 09 мая 2020
For j = 0 To 3

If AnswerOrder(j) = 1 Then
ActivePresentation.Slides(3).Shapes("a" & j + 1).Top = 218
ActivePresentation.Slides(3).Shapes("a" & j + 1).Left = 303
ElseIf AnswerOrder(j) = 2 Then
ActivePresentation.Slides(3).Shapes("a" & j + 1).Top = 288
ActivePresentation.Slides(3).Shapes("a" & j + 1).Left = 303
ElseIf AnswerOrder(j) = 3 Then
ActivePresentation.Slides(3).Shapes("a" & j + 1).Top = 363
ActivePresentation.Slides(3).Shapes("a" & j + 1).Left = 303
ElseIf AnswerOrder(j) = 4 Then
ActivePresentation.Slides(3).Shapes("a" & j + 1).Top = 432
ActivePresentation.Slides(3).Shapes("a" & j + 1).Left = 303
End If

Next j

Это делает код более аккуратным.

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