PowerPoint 2002 - kør macro kun en gang
Hej til alle!Jeg prøver at implementere en (mere eller mindre) smart navigation combobox i min PowerPoint 2002 præsentation.
(koden findes efter forklaring)
* Jeg har en combobox i en SlideMaster som læser alle slide titler.
* Macro kode for at indlæse titler aktiveres mens præsentationen er i gang når brugeren laver en "mouseover" på en usynlige firkant som ligger lige over comboboxen. (en "autoshape" med en "action setting" - on mouseover run macro "Initialise")
* Mens brugeren kører præsentationen og vælger en titel fra combobox'en så hoppen han til den valgte slide.
** Problemstilling: Combobox macro indlæser slide titlerne _hver_ gang brugeren laver en "mouseover" (klart). Men det betyder at listen både genopfriskes OG starter igen med at vise den allerførste slide titel - brugeren derimod mister måske overblikket om hvor i præsentation han er lige nu.
** Ønskes: En måde sådan at comboboxen macro læser alle slide titler kun en gang når præsentationen starter, og så stopper der efter den første gang.
** Ikke Ønskes: at brugeren skal "press here once to fill out combobox navigation" - det hele skal helst være automatisk.
** Har prøvet (uden held): at bruge
'Static norun as Boolean'
'If norun then exit Sub'
'norun=true'
Mange tak for hjælpen!!! Jeg er ren begynder og håber at de eksperter her kan hjælpe mig lidt :)
___________________________________________
(macro som indlæser slide titler, findes som "module1" i VB editor)
Option Explicit
Sub Initialize()
' Fired when you mouseover the autoshape over the combobox on the Master slide
' Collects slide titles into combobox
Dim oSl As Slide
Dim ocombo As ComboBox
'Static norun As Boolean
' has this Initialise macro run already once ?
'If norun Then Exit Sub
'norun = True
' Get a reference to our list box, clear its contents
Set ocombo = ActivePresentation.SlideMaster.Shapes("MSlideTitles").OLEFormat.Object
ocombo.Clear
' some slides may not have a title; trap and ignore the error that results
On Error Resume Next
For Each oSl In ActivePresentation.Slides
ocombo.AddItem oSl.Shapes.Title.TextFrame.TextRange.Text
Next
Set ocombo = Nothing
Set oSl = Nothing
End Sub
____________________________________________
(macro som hopper til den valgte slide i combobox - findes under "SlideMaster" i "Microsoft PowerPoint Objects" i VB editor)
Option Explicit
Private Sub MSlideTitles_Click()
' This runs when you click one of the slide titles
' in the combo box
Dim oSl As Slide
Dim lOffset As Long
Dim slidenum As Integer
lOffset = 2
' Find the slide index of the slide with this title
For Each oSl In ActivePresentation.Slides
' since there may not be a title ...
On Error Resume Next
If oSl.Shapes.Title.TextFrame.TextRange.Text = SlideMaster.MSlideTitles.Value Then
' trap no-title errors
If Err.Number = 0 Then
' we found it, go there, process no more
slidenum = oSl.SlideIndex
ActivePresentation.SlideShowWindow.View.GotoSlide (slidenum)
Exit For
End If
End If
Next
End Sub
