Avatar billede stve Nybegynder
19. oktober 2009 - 10:17

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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester