Create an index or table of contents (TOC) with links to a folder full of PPT files
Problem
You have a whole collection of PPT files you want to link to from a single PPT "menu" slide or presentation. While you can insert links, one by one, to each file in the folder where the PPT files are stored, that's tedious.
Solution
Macros to the rescue.
Run this macro and it'll produce a series of text shapes on the current slide, one per PPT file in the directory pointed to by targetFileSpec (which you'll need to edit below).
Each one also becomes a link TO the PPT file. For lots of files, you'll need to do a little reformatting/spacing and aligning, but this'll whip up the basic "index" page for you in under a second.
Sub MakeLotsOfLinks() Dim TheTextBox As Shape Dim FileName As String Dim LinkRange As TextRange Dim Top, Left, width, height As Double Dim targetFileSpec As String ' EDIT THIS: Replace the text between the equals signs ' with the path to the folder where your PPT files are stored targetFileSpec = "D:\Test\*.PPT" ' Rather arbitrary starting positions for text box Top = 18# Left = 18# width = 600# height = 30# ' Get the first matching file FileName = Dir$(targetFileSpec) ' And if somebody's home: While FileName <> "" ' Add a textbox to hold the link Set TheTextBox = ActiveWindow.Selection.SlideRange.Shapes.AddTextbox(msoTextOrientationHorizontal, _ Left, _ Top, _ width, _ height) TheTextBox.TextFrame.TextRange.Text = FileName Set LinkRange = TheTextBox.TextFrame.TextRange.Characters(Start:=1, Length:=Len(FileName)) LinkRange.ActionSettings(ppMouseClick).Hyperlink.Address = FileName ' Get the next file FileName = Dir$ ' move the text box start position down Top = Top + height Wend End Sub
Or put the links in a table
If you prefer to have the links in a table, you can use the following code.
First, create a table with enough cells to hold the number of files you'll be linking to. Then with the table selected, run this:
Sub MakeLotsOfLinksInATable() Dim FileName As String Dim LinkRange As TextRange Dim targetFileSpec As String Dim aFileNames() As String Dim oTable As Shape Dim x As Long Dim y As Long Dim lPointer As Long ' EDIT THIS: Replace the text between the equals signs ' with the path to the folder where your PPT files are stored targetFileSpec = "c:\myfiles\*.PPT" ReDim aFileNames(1 To 1) As String ' Fill the array with filenames FileName = Dir$(targetFileSpec) ' And if files are found: While FileName <> "" aFileNames(UBound(aFileNames)) = FileName FileName = Dir$ ReDim Preserve aFileNames(1 To UBound(aFileNames) + 1) As String Wend ' that leaves us with blank array entry; remove it: ReDim Preserve aFileNames(1 To UBound(aFileNames) - 1) As String ' now use the table Set oTable = ActiveWindow.Selection.ShapeRange(1) lPointer = 1 For y = 1 To oTable.Table.Rows.Count For x = 1 To oTable.Table.Columns.Count oTable.Table.Cell(y, x).Shape.TextFrame.TextRange.Text = aFileNames(lPointer) Set LinkRange = _ oTable.Table.Cell(y, x).Shape.TextFrame.TextRange.Characters(Start:=1, Length:=Len(aFileNames(lPointer))) LinkRange.ActionSettings(ppMouseClick).Hyperlink.Address = aFileNames(lPointer) lPointer = lPointer + 1 Next ' x Next ' y End Sub
See How do I use VBA code in PowerPoint? to learn how to use this example code.
Notes and Caveats
The links this produces are pathless, so you can move your collection of PowerPoint files from one computer to another easily. As long as your "index" PowerPoint file and all of the linked PPT files are together in the same folder, the links will work.
If the presentations are served from the web rather than a local drive, network drive or CD, the links won't work.
Also, due to a bug in PowerPoint, if you start PowerPoint then choose the index file from the Most Recently Used list on the File menu, PowerPoint doesn't properly set the default folder, so it won't find the linked files. Use any other method to open the presentation:
- Double-click the presentation's icon
- Start PowerPoint, choose File, Open and browse to the presentation
- Drag the presentation's icon onto the PPT icon or into a running copy of PowerPoint