2

パワーポイントのプレゼンテーションにカウンターを追加したいと考えています。これはVBAで実行できるかもしれないと誰かが私に言いました。これが VBA で実行できるかどうか、およびその方法を知っていますか?

基本的には、私がやりたいことは次のとおりです。たとえば、プレゼンテーションの開始以降にレンタルされた車の数を表すカウンターを表示します。たとえば、開始時のカウンタは 0 で、1 分ごとに 2000 ずつ増加します (これは単なる例です)。すべてのスライドにカウンターが表示されているので、私の講演の最後に、講演の開始以来 X (多数) の車がレンタルされていることがわかります (そして、私は彼らに伝えます)。

インターネットで何かを見つけようとしましたが、うまくいきませんでした... 誰かが私を助けてくれることを願っていますか?

4

1 に答える 1

0

私はあなたにいくつかのアイデアを与えます。コードを提供しなくても、おそらく役立つでしょう。

  1. 一般に、プレゼンテーションに「タイマー」のようなものが必要です。これは、プレゼンテーションから始まり、使用時間をカウントします。残念ながら、PowerPoint にはこのようなものはありません。C# COM アドインなどの外部ソリューションを使用することもできますが、かなり複雑です。

  2. PP アプリケーション イベントを使用できますが、車の価値は毎分変化するのではなく、新しいスライドを入力するたびに、またはその他のイベントが発生するたびに変化します (後退など)。少し複雑ですが、私たち (StackOverflow ユーザー) の知識の範囲内です。

そのリンクの下で、私が多くの興味深いアイデアを見つけた場所を検索したり質問したりすることができます。

解決策を提供することを約束したので、質問が閉じられても解決したいと思います。したがって、許可されることを願って、その回答を再編集することでそれを行います。

  1. 各スライドに「カウント値」が配置される「テキスト ボックス」があることを確認する必要があります。次のコードを Module1 に追加して実行します。

    Sub Add_CarValue_Text()
    
    Dim SLD As Slide, SHP As Shape, shCarValue As Shape
    Dim boCarValue As Boolean
    
    For Each SLD In ActivePresentation.Slides
        For Each SHP In SLD.Shapes
            If SHP.Name = "CarValue" Then
                boCarValue = True
                Exit For
            End If
        Next
    
        If Not boCarValue Then
            Set shCarValue = SLD.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, 150, 50)
            With shCarValue
                .Name = "CarValue"
                .TextFrame.TextRange.Text = "Cars counter: "
            End With
    
        End If
        boCarValue = False
    Next
    End Sub
    
  2. 新しいクラス モジュールを追加し、そこにコードの下に配置します。必要に応じて変更してください。

    Public WithEvents PPApp As Application
    
    Private TimerStart As Long
    Private Const increasePerMinute = 1000
    
    Private Sub PPApp_SlideShowBegin(ByVal Wn As SlideShowWindow)
        TimerStart = Int(Timer)
    End Sub
    
    Private Sub PPApp_SlideShowNextSlide(ByVal Wn As SlideShowWindow)
        If Not Wn.View.Slide.Shapes("CarValue") Is Nothing Then
            Dim Lap As Integer
            Lap = (Int(Timer) - TimerStart) / 10 'change for 60 to change from 10sec to 1 min
            Wn.View.Slide.Shapes("CarValue").TextFrame.TextRange = "Cars volume: " & Lap * increasePerMinute
        End If
    End Sub
    
  3. 次のコードを Module2 に追加し、手順を実行します。

    Public tmpPPApp As New AppClass
    Sub StartUp()
        Set tmpPPApp.PPApp = PowerPoint.Application
    End Sub
    
  4. プレゼンテーションを開始します。

重要!コードを変更した場合は、手順 3 をもう一度実行してください。さらに、念のため、プレゼンテーションを開始する前に必ず手順 3 を実行する必要があります。

于 2013-03-15T09:45:39.163 に答える