autoShape PowerPoint



  • autoShape PowerPoint
    di elton (utente non iscritto) data: 04/02/2013 16:16:08

    buongiorno, mi chiamo Elisa
    avrei bisogno di un aiuto con una macro per PowerPoint 2003 o 2010;
    sulla prima slide ho inserito una Forma (freccia) e altrettanto nella slide 10 ne ho un'altra (freccia).
    Vorrei che con una macro, quando premo sulla freccia di slide 1 durante la presentazione si aprisse la slide 10 che contiene l'altra Forma (freccia); e quando premo sulla freccia di slide 10 si apra la slide 1.
    Non conoscendo vb chiedo aiuto agli esperti.
    Sapreste aiutarmi
    Grazie a tutti



  • di Vecchio Frac data: 04/02/2013 17:19:16

    Tasto destro sulla freccia, Impostazioni azioni, Effettua collegamento a..., Diapositiva ... (scegli diapositiva da raggiungere).
    Dovrebbe essere sufficiente.





  • di elton (utente non iscritto) data: 05/02/2013 08:19:04

    ciao Vecchio Frac,
    no, quello che vorrei è che cliccando sulla freccia di slide 1 la macro raggiunga la slide che contiene la seconda freccia.
    Per intenderci è come se avessimo un segnalibro:
    metto la freccia 2 a slide 18; premo su freccia 1 che si trova a slide 1 e questa mi visualizza slide 18.
    metto la freccia 2 a slide 5; premo su freccia 1 che si trova a slide 1 e questa mi visualizza slide 5
    ecc.
    grazie



  • di Vecchio Frac data: 05/02/2013 12:10:35

    Ho capito.
    Allego una presentazione di prova.
    Di seguito il codice (in un modulo della presentazione Powerpoint).

    ps. per rendere editabile una presentazione e quindi vederne il codice, modificarne e diapositive, ecc., basta rinominare l'estensione da pps a ppt.
     
    Option Explicit
    
    Public Sub follow_arrow()
    Dim sl As Integer, h As Shape, current_slide As Integer
    Dim i As Integer, slide_from As Integer, slide_to As Integer
    Dim a_slide As slide, a_shape As Shape, caller As Integer
    
        current_slide = ActivePresentation.SlideShowWindow.View.CurrentShowPosition
        caller = ActivePresentation.Slides(current_slide).Tags("caller")
        If caller <> 0 Then
            ActivePresentation.Slides(current_slide).Tags.Add "caller", 0
            ActivePresentation.SlideShowWindow.View.GotoSlide caller
            Exit Sub
        End If
            
        
        If current_slide = ActivePresentation.Slides.Count Then
            slide_from = 1
            slide_to = ActivePresentation.Slides.Count - 1
        Else
            slide_from = current_slide + 1
            slide_to = ActivePresentation.Slides.Count
        End If
    
        For i = slide_from To slide_to
            Set a_slide = ActivePresentation.Slides(i)
            For Each a_shape In a_slide.Shapes
                If a_shape.AutoShapeType = msoShapeRightArrow Then
                    ActivePresentation.SlideShowWindow.View.GotoSlide i
                    a_slide.Tags.Add "caller", current_slide
                    Exit Sub
                End If
            Next
        Next
    
    End Sub






  • di elton (utente non iscritto) data: 06/02/2013 15:33:21

    ciao Francesco,
    la macro non funziona. mi segnala un errore.
    Quello che vorrei che facesse la macro è:
    Clicco sulla freccia arancione mi apre la slide che contiene la freccia azzurra
    Clicco sulla freccia azzurra mi si apre la slide che contiene la freccia arancione
    Se sposto la freccia azzurra a slide 10, premendo sulla freccia arancione mi si apre slide 10 che contiene la freccia azzurra

    Questo mi permetterebbe di avere un segnalibro nelle slide

    Ti ringrazio dell'aiuto



  • di Vecchio Frac data: 06/02/2013 16:44:27

    Mi accorgo che non si è allegato il file ^_^ ora vedo se riesco a rimediare.
    Mi sembra strano che segnali un errore (non dici quale).
    Comunque ho capito bene il tuo problema e, nell'esempio, l'avevo anche risolto :)

    Adesso cerco quel file (che è rimasto nel computer dell'ufficio e devo recuperarlo collegandomi da casa).

    p.s. "ciao Francesco"... mi stupisce che conosci il mio nome... non l'ho scritto da nessuna parte, si vede che sei telepatica ^_^






  • di Vecchio Frac data: 06/02/2013 16:49:38

    Ho allegato il file, adesso vedo di modificarlo secondo la tua richiesta.





  • di elton (utente non iscritto) data: 06/02/2013 17:03:55

    g r a n d e! - P e r f e t t o
    funziona benissimo.
    ti ringrazio dell'aiuto.



  • di Vecchio Frac data: 06/02/2013 17:37:51

    Aspetta!! :)
    Non va bene come hai chiesto tu ...
    il codice che fa quello che chiedi è quello che allego qui sotto.
    Adesso la freccia arancione cerca quella blu e viceversa.

     
    Option Explicit
    
    Const AZZURRO = 12419407
    Const ARANCIONE = 683236
    
    Public Sub cerca_freccia_azzurra()
    Dim i As Integer
    Dim a_slide As Slide, a_shape As Shape
    
        For i = 1 To ActivePresentation.Slides.Count
            Set a_slide = ActivePresentation.Slides(i)
            For Each a_shape In a_slide.Shapes
                If a_shape.AutoShapeType = msoShapeRightArrow And a_shape.Fill.ForeColor = AZZURRO Then
                    ActivePresentation.SlideShowWindow.View.GotoSlide i
                    Exit Sub
                End If
            Next
        Next
    End Sub
    
    
    Public Sub cerca_freccia_arancione()
    Dim i As Integer
    Dim a_slide As Slide, a_shape As Shape
    
        For i = 1 To ActivePresentation.Slides.Count
            Set a_slide = ActivePresentation.Slides(i)
            For Each a_shape In a_slide.Shapes
                If a_shape.AutoShapeType = msoShapeRightArrow And a_shape.Fill.ForeColor = ARANCIONE Then
                    ActivePresentation.SlideShowWindow.View.GotoSlide i
                    Exit Sub
                End If
            Next
        Next
    End Sub
    






  • di elton (utente non iscritto) data: 06/02/2013 18:37:12

    ciao,
    ora con questo codice mi hai risolto completamente il problema. funziona benissimo.
    volevo solo ancora chiederti:
    le 2 costanti Const AZZURRO = 12419407
    Const ARANCIONE = 683236
    se volessi cambiare i colori dove trovo la corrispondenza dei nomi e colori?
    Sei stato molto gentile e ti ringrazio nuovamente. Bravissimo.



  • di Vecchio Frac data: 06/02/2013 18:59:54

    Ho fatto così:
    ho visto che la slide arancione era in slide 1; ho aperto l'editor di codice (Alt-F11), ho aperto la finestra Immediata (Ctrl-G) quindi ho scritto:
    ? ActivePresentation.Slides(1).Shapes(1).Fill.Forecolor
    e ho ottenuto il colore della freccia arancione;
    poi sapendo che la freccia azzurra era in slide 3 è bastato portarsi sulla riga appena scritta, cambiando il riferimento alla slide:
    ? ActivePresentation.Slides(3).Shapes(1).Fill.Forecolor
    e ho ottenuto il codice del colore azzurro
    tutto qui :)