2017-07-29 4 views
1

Je crée un Powerpoint dans vba. Mon plan est de mettre en place le code de telle sorte que chaque sous-programme crée une certaine diapositives. Cependant, j'ai besoin de passer le numéro de diapositive à chaque sous-programme afin qu'il crée la diapositive appropriée dans la bonne position. J'ai du mal à définir ce que le .Slides.Count est dans Excel vba. Je comprends que c'est techniquement long, mais d'une façon ou d'une autre j'ai pu le faire passer en entier dans un autre patch de code qui ne fonctionne plus.Variable de nombre de diapositives Powerpoint dans VBA

Mes questions sont les suivantes:

  1. La fonction .Slides.Count. Est-ce techniquement un long ou un entier. Si c'est un long, pourquoi est-il défini de cette façon? Est-ce parce que les nombres entiers ont un plafond et les longs ne le font pas?

  2. Comment dois-je transmettre la variable .Slides.Count dans mon sous-programme qui crée une nouvelle diapositive? Entier ou long?

J'ai quelques exemples de code:

Sub CreatePres() 

Dim ppApp As PowerPoint.Application 
Dim ppPres As PowerPoint.Presentation 
Dim ppSlide As PowerPoint.Slide 
Dim ppTextbox As PowerPoint.Shape 

Set ppApp = New PowerPoint.Application 
ppApp.Visible = True 
ppApp.Activate 

Set ppPres = ppApp.Presentations.Add 
slidesCount = ppPres.Slides.Count 
Set ppSlide = ppPres.Slides.Add(slidesCount + 1, ppLayoutTitle) 
ppSlide.Shapes(1).TextFrame.TextRange.Text = "Hello world" 
ppSlide.Shapes(2).TextFrame.TextRange.Text = Date 
slidesCount = slidesCount + 1 

Call slide2(slidesCount) 

End Sub 
Sub slide2(i As Integer) 
Set ppSlide = ppPres.Slides.Add(i + 1, ppLayoutTitle) 
ppSlide.Select 
ppSlide.Shapes(1).TextFrame.TextRange.Text = "Hello world" 
ppSlide.Shapes(2).TextFrame.TextRange.Text = Date 

End Sub 
+0

Slides.Count est longue, mais vous n'avez pas estompé slidesCount dans votre code VBA si traite probablement comme une variante. TOUJOURS inclure Option Explicit comme première ligne dans un module VB/VBA; cela va vous obliger à DIM correctement vos variables avant de les utiliser. Pourquoi longtemps? Si je comprends bien, c'est parce que Longs sont plus efficaces que Integers. Notez également que vous n'avez pas besoin de ppSlide.Select dans Sub Slide2. –

Répondre

-1

http://vba.relief.jp/powerpoint-vba-get-active-slide-number/

La façon de définir une variable de la diapositive en cours est
foo = ActiveWindow.Selection.SlideRange.SlideIndex

Alors appelez la fonction avec Call slide2(slidesCount)

Effectuez les opérations suivantes

Sub CreatePres() 
    Dim ppApp As PowerPoint.Application 
    Dim ppPres As PowerPoint.Presentation 
    Dim ppSlide As PowerPoint.Slide 
    Dim ppTextbox As PowerPoint.Shape 

    Set ppApp = New PowerPoint.Application 
    ppApp.Visible = True 
    ppApp.Activate 

    Set ppPres = ppApp.Presentations.Add 
    slidesCount = ppPres.Slides.Count 
    Set ppSlide = ppPres.Slides.Add(slidesCount + 1, ppLayoutTitle) 
    ppSlide.Shapes(1).TextFrame.TextRange.Text = "Hello world" 
    ppSlide.Shapes(2).TextFrame.TextRange.Text = Date 
    slidesCount = ActiveWindow.Selection.SlideRange.SlideIndex 
    Call slide2(slidesCount) 
End Sub 

Sub slide2(i As Integer) 
    Set ppSlide = ppPres.Slides.Add(i + 1, ppLayoutTitle) 
    ppSlide.Select 
    ppSlide.Shapes(1).TextFrame.TextRange.Text = "Hello world" 
    ppSlide.Shapes(2).TextFrame.TextRange.Text = Date 
End Sub