Microsoft KB Archive/259823

= PPT2000: Sample VBA Macro to Start Page Numbers After First Slide =

Article ID: 259823

Article Last Modified on 10/11/2006

-

APPLIES TO


 * Microsoft PowerPoint 2000 Standard Edition

-



This article was previously published under Q259823



SUMMARY
If you want to skip the first few slides when you number the slides in a presentation - for example, if you want slide 3 to have the number 1 - you typically have to create the text frame for each slide number manually. This article contains a macro that automates most of this procedure.



MORE INFORMATION
Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements.

NOTE: The following macro examples work only in PowerPoint. Visual Basic for Applications macros are not supported by the Microsoft PowerPoint Viewer. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:

Sample Macro
The following sample macro allows you to pick a slide to start numbering from 1, or to redo slide numbers that you created with this macro. The macro puts the custom property Page Numbers into the custom document properties. If you want to change the first slide from which to start numbering, change the value of this property. Sub numberSlides ' On Error, continue with running macro. On Error Resume Next

Dim i As Long Dim j As Long Dim bProperty As Boolean Dim lStart As Long Dim oShape As Shape Dim sShapeName As String ' Set bProperty flag to true. If there is no custom property ' called &quot;Page Numbers&quot;, then create new text frames. '  bProperty = True ' Loop through all the custom properties. If none, subroutine ' drops out of the loop. Check to see if the custom property ' is equal to &quot;Page Numbers&quot;, if so, retrieve the value stored. '  For j = 1 To ActivePresentation.CustomDocumentProperties.Count If ActivePresentation.CustomDocumentProperties.Item(j) _ .Name = &quot;Page Numbers&quot; Then lStart = ActivePresentation.CustomDocumentProperties.Item(j).Value

' Loop through the presentation, starting at the saved slide ' index position. '        For i = lStart To ActivePresentation.Slides.Count ' Create the shape's name based on the current slide name. ' This is done because each page number shape created with ' this macro has a unique name and can be referenced simply ' by constructing the name using the same parameters. If you ' change the name of the slide, delete the page number frame ' to allow it to re-create it. '           sShapeName = &quot;Page Num &quot; & ActivePresentation.Slides(i).Name ' Set oShape to be the name generated above. '           Set oShape = ActivePresentation.Slides(i).Shapes(sShapeName)

' If an Error number other than 70 is returned, then ' create a new frame and place it on the slide. Otherwise ' update the existing frame with the current page number. '           If Err.Number <> 70 Then MakePageNum i, lStart, sShapeName Err.Number = 70 Else ChangeExist oShape, i, lStart End If        Next i ' Set bProperty to false to prevent the subroutine from ' running the code after this section. '        bProperty = False

End If  Next j ' If bProperty is true, then this is the first time this ' macro has been run for this presentation. '  If bProperty Then ' Prompt user for starting slide from which to begin numbering. '     lStart = CDbl(InputBox(&quot;What slide does page 1 to start on?&quot;, _ &quot;Page Numbering&quot;, &quot;1&quot;))

' Check for valid lStart value. If incorrect, end the macro. '     If lStart <= 0 Then MsgBox &quot;Value must be between 1 and &quot; & _ ActivePresentation.Slides.Count Exit Sub End If ' Create the custom property &quot;Page Numbers&quot; and set it ' equal to the user-provided value. '     ActivePresentation.CustomDocumentProperties _ .Add Name:=&quot;Page Numbers&quot;, LinkToContent:=False, _ Type:=msoPropertyTypeNumber, Value:=lStart ' From the starting slide to the end of the presentation, ' create a new text frame with the values for the page ' numbers. '     For i = lStart To ActivePresentation.Slides.Count sShapeName = &quot;Page Num &quot; & ActivePresentation.Slides(i).Name MakePageNum i, lStart, sShapeName Next i  End If End Sub

Function ChangeExist(oShape As Shape, i As Long, lStart As Long) ' This function updates existing text frames in a ' presentation where the numberSlides macro has run ' before. '  With oShape.TextFrame.TextRange

' Create slide number by adding one to the index value, and ' then substracting the starting index location from the ' result. '     .Text = i + 1 - lStart .Font.Name = &quot;Times New Roman&quot; .Font.Size = 48 .ParagraphFormat.Alignment = ppAlignCenter End With End Function

Function MakePageNum(i As Long, lStart As Long, sShapeName As String) ' This function creates a new text frame and puts a page number into ' that text frame. '  Dim oShape As Shape ' Create the new shape and place it in the lower-right ' corner of the slide. Slides are 720 points wide ' by 540 points tall. The upper-left corner is at position ' (0,0) the lower right corner is at (720,540). '  Set oShape = ActivePresentation.Slides(i).Shapes _ .AddTextbox(msoTextOrientationHorizontal, 654, 408, 38.5, 64.875) ' Set the shape's name to the name passed to the function. '  oShape.Name = sShapeName With oShape.TextFrame.TextRange ' Create slide number by adding one to the index value, and ' then substracting the starting index location from the ' result. '     .Text = i + 1 - lStart .Font.Name = &quot;Times New Roman&quot; .Font.Size = 48 .ParagraphFormat.Alignment = ppAlignCenter End With

End Function

How to Change the Value of the Page Numbers Custom Property

 * 1) With the presentation open, click Properties on the File menu.
 * 2) On the Custom tab, under Properties, click Page Numbers.

NOTE: This property is only available after you run the numberSlides macro above.
 * 1) In the Value field, type the new slide number from which you want to start the slide numbering. Click OK.

NOTE: If you decide to skip previously numbered slides, you must manually delete the text frames from those slides.

Additional query words: vba

Keywords: kbdtacode kbhowto KB259823

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.