2010-09-16 36 views
0

我已經編程(VSTO)使用下面的代碼PowerPoint中編程查找並刪除動畫/效果

activeSlide.TimeLine.InteractiveSequences.Add().AddTriggerEffect(
     textBox2, 
     MsoAnimEffect.msoAnimEffectFade, 
     MsoAnimTriggerType.msoAnimTriggerOnMediaBookmark, 
     selectedShape, 
     "Bookmark A", 
     MsoAnimateByLevel.msoAnimateLevelNone); 

    activeSlide.TimeLine.InteractiveSequences.Add().AddTriggerEffect(
     textBox2, 
     MsoAnimEffect.msoAnimEffectFade, 
     MsoAnimTriggerType.msoAnimTriggerOnMediaBookmark, 
     selectedShape, 
     "Bookmark B", 
     MsoAnimateByLevel.msoAnimateLevelNone).Exit = MsoTriState.msoTrue; 

所以,我將如何去刪除動畫而不刪除textBox2添加動畫,以PowerPoint幻燈片?有沒有辦法遍歷動畫,並找到我需要刪除哪些與textBox2相關聯的動畫?

回答

1

感謝希亞姆·皮萊的答案,我把他的VBA代碼如下:

private void DeleteAnnimations(Slide slide, Shape shape) 
    { 
     for (int i = slide.TimeLine.InteractiveSequences.Count; i >= 1; i--) 
     { 
      Sequence sequence = slide.TimeLine.InteractiveSequences[i]; 
      for (int x = sequence.Count; x >= 1; x--) 
      { 
       Effect effect = sequence[x]; 
       if (effect.Timing.TriggerType == MsoAnimTriggerType.msoAnimTriggerOnMediaBookmark) 
       { 
        if (effect.Shape.Name == shape.Name) 
         effect.Delete(); 
       } 
      } 
     } 
    } 
1

原諒我,因爲我沒有PPT 2010方便(你應該注意在你的問題是這個版本),但這應該讓你開始在正確的方向。

InteractiveSequencesSequence對象的集合
Sequence對象實際上是Effect對象的集合
Effect對象都有一個Shape財產

foreach (Sequence seq in activeSlide.TimeLine.InteractiveSequences) 
    foreach (Effect eff in seq) 
    if (eff.Shape == "target shape") 
     ... 

我相信這是一個刪除或可能刪除功能的效果對象本身。

+0

你不能的foreach辦公室對象,然後刪除,所以我找到了經驗。你必須循環 – alex

0

它只是刪除動畫而不刪除文本框:

dim osh as shape 

set osh = ..... 

oSh.AnimationSettings.Animate = 0 => deleting the animation of osh