VBA Powerpoint 2016 долгое время для выполнения кода для флажка - PullRequest
0 голосов
/ 14 декабря 2018

На слайде презентации PowerPoint я добавил кнопку действия (флажок), которая активируется при создании презентации.Поэтому у меня есть возможность написать функцию, которая выглядит следующим образом:

Private Sub case_choix1_Click()

Dim OSh As Shape
  For Each OShp In Shapes
    If OShp.Name = "answer_mask" Then
        If (case_choix1.Value) Then
            OShp.Visible = False
            OShp.Flip msoFlipHorizontal
            OShp.Flip msoFlipHorizontal         
        Else
            OShp.Visible = True
            OShp.Flip msoFlipHorizontal
            OShp.Flip msoFlipHorizontal
        End If
    End If
  Next OShp
End Sub

Эта функция позволяет мне скрывать или видеть фигуры, которые я называю «answer_mask», в зависимости от состояния моей кнопки.Эта функция очень хорошо работает с PowerPoint 2010, который я использовал ранее, и выполнение было достаточно быстрым для меня.

Теперь я использую Powerpoint 2016, и эта функция легко выполняется 6-7 секунд !!Даже если у меня на слайде всего менее 10 форм и текстов, у меня возникает эта проблема как при создании нового слайд-шоу, так и при использовании моих старых презентаций, выполненных с помощью powerpoint 2016.

Параллельно с этим, У меня есть более общий макрос, который позволяет мне перевести состояние моей кнопки в желаемое состояние.Алгоритм очень похож.Я просто просматриваю все мои слайды, нахожу кнопку-флажок, меняю состояние и устанавливаю фигуры «answer_mask» в состояние по умолчанию.Время сделать это очень быстро.

Я пытался удалить все видимые действия и создать манипуляции.Алгоритм очень быстрый.Как только я добавляю только видимую модификацию формы, она становится очень медленной и такой же для Flip

Интересно, почему эта часть программы занимает много времени на этой версии powerpoint и если вы видите вещи, которыенеобходимо изменить, чтобы улучшить его исполнение.

Спасибо за ваши предложения.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Поскольку у меня есть число «answer_mask» от 1 до около 10, в зависимости от того, какой у меня слайд, этот код быстрее, чем мой предыдущий.

Private Sub case_choix1_Click()

Dim OShp As Shape

  On Error Resume Next
  Set OShp = Shapes("answer_mask")
  If Err.Number = 0 Then
         For Each OShp In Shapes
           If OShp.Name = "answer_mask" Then
            If (case_choix1.Value) Then
                OShp.Visible = False
                OShp.Flip msoFlipHorizontal
                OShp.Flip msoFlipHorizontal
            Else
                OShp.Visible = True
                OShp.Flip msoFlipHorizontal
                OShp.Flip msoFlipHorizontal

            End If    
        End If
          Next OShp      
   Else
      Exit Sub
  End If

End Sub
0 голосов
/ 15 декабря 2018

[Опубликовано как ответ, а не как комментарий, потому что вам действительно не нужно просеивать код, опубликованный в виде комментариев.]

Если по какой-то причине замедление вызвано циклическим изменением формы,Вы можете попробовать это:

Private Sub case_choix1_Click()

'Dim OSh As Shape
' Should be this
Dim OShp As Shape

  On Error Resume Next
  Set OShp = Shapes("answer_mask")
  If Err.Number = 0 then
        If (case_choix1.Value) Then
            OShp.Visible = False
            OShp.Flip msoFlipHorizontal
            OShp.Flip msoFlipHorizontal         
        Else
            OShp.Visible = True
            OShp.Flip msoFlipHorizontal
            OShp.Flip msoFlipHorizontal
        End If
   Else
      Exit Sub    
  End If

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