Я надеюсь, что я в правильном SE. Посты, которые я нашел, направили меня на пост здесь.
BLUF: я пытаюсь использовать оператор if/else для применения / удаления импульсной анимации для определенного объекта в PowerPoint.
Предыстория: код основан на документе Excel, потому что я использую его в качестве простого базового переносного брандмауэра, чтобы сотрудники не возились со слайдами. Я хочу оперативный документ обновления, который помещает информацию в работающий слайд PowerPoint и обновляет текст в зависимости от состояния определенного сайта (вверх или вниз). Я сделал простую кнопку вверх / вниз, которая переключается только между UP / DN в ячейке и передает их в другие ячейки, чтобы определить, что делать с данными. Затем кнопка макроса запускает код и обновляет текст в PowerPoint.
Хорошие новости: все отлично работает (кроме анимации). Текст изменяется (слова и цвет) во время работы PowerPoint, и блокировка документа Excel предотвращает путаницу с настройками.
Основная часть кода в вопросе:
For Each c In Sheet1.Range("a2:a" & Sheet1.Range("a" & Rows.Count).End(xlUp).Row)
shapeslide = Sheet1.Range("a" & c.Row)
shapename = Sheet1.Range("b" & c.Row)
shapetext = (Sheet1.Range("c" & c.Row).Text)
friendlyname = Sheet1.Range("d" & c.Row)
pPreso.Slides(shapeslide).Shapes(shapename).TextEffect.Text = shapetext
If (friendlyname = "DN") Then
pPreso.Slides(shapeslide).Shapes(shapename).TextFrame.TextRange.Font.Color.RGB = RGB(255, 0, 0)
'The porttion below worked, but it is not animation (not as cool)
'pPreso.Slides(shapeslide).Shapes(shapename).TextEffect.PresetTextEffect = 4
'pPreso.Slides(shapeslide).Shapes(shapename).TextEffectFormat = msoAnimEffectBoldFlash
Else
pPreso.Slides(shapeslide).Shapes(shapename).TextFrame.TextRange.Font.Color.RGB = RGB(0, 255, 0)
End If
Next c
Оператор for проходит через ячейки, где я вызываю определенный слайд, фигуру и текст фигуры. Дружественное имя - это повторение IF/Else.
Если я изменяю статус на DN, он становится красным, а если я изменяю его на UP, он становится зеленым.
Мне удалось применить анимацию с помощью этого кода в If/Else:
Dim oeff As Effect
Dim osld As Shape
Set osld = ppapp.ActivePresentation.Slides(shapeslide).Shapes(shapename)
With pPreso.Slides(shapeslide)
Set oeff = .TimeLine.MainSequence.AddEffect(Shape:=.Shapes(shapename),_ effectID:=msoAnimEffectBoldFlash, trigger:=msoAnimTriggerAfterPrevious)
With oeff
.Timing.RepeatDuration = 25
End With
End With
Основная проблема заключается в том, что (по понятным причинам) он постоянно применяет анимацию, потому что, очевидно, нет никакой проверки, чтобы увидеть, применяется ли этот код. Во-вторых, когда я попытался представить oeff.delete, он просто оставил анимацию, а затем применил не анимацию ко всем остальным, помеченным как "UP" на панели анимации PowerPoint.
Итак, 2 вещи:
Есть ли возможность применить импульсную анимацию? Я не смог найти его в области библиотеки msoAnimEffect.
Есть ли у кого-нибудь элегантный способ включить или отключить анимацию с помощью этого метода, который я создал, или мне нужно будет найти способ установить флаги, прочитать эти флаги, а затем каким-то образом включить их в оператор If/Else?
Вот фотография Excel Doc: