Powerpoint: comment insérer une propriété de document (alias 'champ') dans une diapositive?

31

Comment puis-je insérer une propriété de document (par exemple, le nom de l'auteur) dans une diapositive dans PowerPoint 2007? Je sais que cela peut être fait dans Microsoft Word, mais je ne trouve pas comment le faire dans PowerPoint.

(L'idée est qu'avec une propriété de document, il est facile de modifier, par exemple, le contenu du pied de page dans toutes les diapositives, même si vous utilisez des pages maîtres différentes. S'il existe une solution différente, ce serait bien aussi.)

Rabarberski
la source

Réponses:

19

Bien que Word puisse le faire, PowerPoint ne le peut pas. AFAIK, vous pouvez avoir des propriétés de document dans PPT, mais vous ne pouvez pas les insérer sur une diapositive. Le seul champ de mise à jour disponible pour PowerPoint est la date et le numéro de diapositive. Quoi qu'il en soit, il pourrait y avoir une solution de contournement dans VBA pour y parvenir. Vous pouvez demander ceci sur Stackoverflow pour tenter votre chance.

Mehper C. Palavuzlar
la source
6

Je viens d'écrire un sous-programme pour mettre les propriétés nommées dans des objets texte balisés sur toutes les diapositives.

Pour mettre une propriété de fichier sur des diapositives. Créez une zone de texte pour contenir la chaîne. Dans les propriétés / Alt Text, mettez le nom de la propriété entre crochets.

Exécutez ensuite la macro updateProperties().

c'est-à [title]- dire - permettrait au titre du document d'être mis à jour sur plusieurs

Deux balises spéciales ont été écrites:

  • [copyright]insérerait une chaîne de copyright, c.-à-d. © 1998-2013 P.Boothroyd, NIS Oskemen
  • [page] insérerait le numéro de diapositive de l'onglet éditeur
  • 'Copier les propriétés du document dans toutes les diapositives
    «c) 2013, P.Boothroyd pour NIS Oskemen
    Dim processPage As Slide
    
    Sub updateProperties ()
        Dim page comme diapositive
        Dim propname As String
        'analyser toutes les diapositives de la présentation active (document)
        Pour chaque processPage In Application.ActivePresentation.Slides
            'scanner tous les éléments de la page pour la zone de texte avec le champ "altText / title" balisé avec "["
            Pour chaque obj dans processPage.Shapes
                Si Left (obj.Title, 1) = "[" Then
                    Dim sStart, sEnd As Integer
                    'extraire la propriété entre crochets
                    sStart = 2
                    sEnd = InStr (2, titre obj, "]")
                    propname = Trim (Mid (obj.Title, sStart, sEnd - 2))
                    Si obj.Type = msoTextBox Then
                        'définissez la zone de texte sur la valeur demandée
                        obj.TextFrame.TextRange.Text = getProperty (propname, obj.TextFrame.TextRange.Text)
                    Fin si
                Fin si
            Suivant 'obj
        Page suivante
    End Sub
    
    'récupère la propriété du document nommé (avec option par défaut)
    Fonction getProperty (propname, facultatif def As String) As String
        'propriété affectée de la valeur par défaut
        getProperty = def
        Dim trouvé comme booléen
        trouvé = Faux
        propname = LCase (propname)
    
        «le droit d'auteur est une propriété générée
        Si propname = "copyright" Alors
            Dim auteur As String
            Dim entreprise As String
            Dim année De la chaîne
            Dim yearTo As String
    
            'obtenir toutes les variables appropriées
            author = getProperty ("author", "")
            company = getProperty ("entreprise", "")
            yearFrom = getProperty ("créé", "")
            yearTo = Format (Now (), "YYYY")
    
            «insérer le symbole du droit d'auteur
            getProperty = Chr (169) + ""
    
            'attacher une année pour l'avis de droit d'auteur
            Si annéeDe l'annéeJusqu'à
                getProperty = getProperty + yearFrom + "-"
            Fin si
            getProperty = getProperty + yearTo
    
            'ajouter l'auteur
            getProperty = getProperty + "" + author
    
            'ajouter un séparateur pour l'auteur / l'entreprise si les deux existent
            Si Len (auteur)> 0 Et Len (entreprise)> 0 Alors
                getProperty = getProperty & ","
            Fin si
            getProperty = getProperty & company
    
            'traitée, donc retournez la valeur
            trouvé = Vrai
        Fin si
    
        'insérer le numéro de diapositive dans le document
        Si propname = "page" Alors
            getProperty = processPage.SlideNumber
            trouvé = Vrai
        Fin si
    
        'si le nom généré créé retourne la valeur
        Si trouvé, alors GoTo ret
    
        'recherche les propriétés standard MS (fichier) de la valeur nommée
        Pour chaque p dans Application.ActivePresentation.BuiltInDocumentProperties
            Si LCase (p.Name) = propname Then
                getProperty = p.Value
                trouvé = Vrai
                Quitter pour
            Fin si
        Suivant 'p
    
        'recherche les propriétés personnalisées de la valeur nommée
        Si trouvé, alors GoTo ret
        Pour chaque p dans Application.ActivePresentation.CustomDocumentProperties
            Si LCase (p.Name) = propname Then
                getProperty = p.Value
                trouvé = Vrai
                Quitter pour
            Fin si
        Suivant 'p
    ret:
    Fonction de fin
    
    P.Boothroyd
    la source
    1

    Une solution de contournement consiste à utiliser des propriétés personnalisées que vous pouvez facilement "Atteindre" (pas besoin de parcourir les diapositives).

    Depuis http://msdn.itags.org/powerpoint/4426/ :

    1. Sélectionnez la forme ou le texte que vous souhaitez définir un signet.
    2. Sélectionnez Fichier | Propriétés ... et activez l'onglet Personnalisé.
    3. Tapez un nom pour le signet.
    4. Cochez «Lien vers le contenu». La valeur répertoriée dans la liste déroulante adjacente lorsque vous cochez «Lien vers le contenu» fait référence à votre sélection.
    5. Cliquez sur Ajouter.
    6. Cliquez sur OK pour fermer la boîte de dialogue Propriétés.

    Maintenant que vous avez créé un signet, vous pouvez y accéder comme suit:
    1. Sélectionnez Modifier | Aller à la propriété ...
    2. Cliquez sur le nom de la propriété dans la boîte de dialogue (c'est le nom que vous avez donné au signet).
    3. Cliquez sur Aller à.

    La boîte de dialogue "Aller à" vous présente une liste de signets sur lesquels vous pouvez double-cliquer et vous place dans vos zones de texte préférées, prêtes à être modifiées / collées.

    thenonhacker
    la source
    1

    La façon la plus simple de le faire dans Powerpoint (au moins pour les valeurs qui apparaîtront sur chaque diapositive) est de modifier le masque des diapositives. Mettez le nom de l'auteur là-bas.

    (Une raison possible pour laquelle Word vous permet, et aucune des autres ne le fait, parce que les différentes équipes de Microsoft se parlent rarement ...)

    Tor Iver Wilhelmsen
    la source
    1
    Voir le deuxième paragraphe de ma question: '... même si vous utilisez des pages maîtres différentes ...'
    Rabarberski
    0

    Mise à jour du code de poignée avec ppt 2019: j'ai un peu modifié la routine pour la prochaine fois, car il est plus facile pour un utilisateur frontal de changer le "texte alternatif" avec le bouton droit de la souris:

        For Each ShapeObj In processPage.Shapes
             If Left(ShapeObj.AlternativeText, 1) = "[" Then
            'If Left(ShapeObj.Title, 1) = "[" Then
                Dim sStart, sEnd As Integer
                ' extract property from between square brackets
                sStart = 2
                'sEnd = InStr(2, ShapeObj.Title, "]")
                sEnd = InStr(2, ShapeObj.AlternativeText, "]")
                'propname = Trim(Mid(ShapeObj.Title, sStart, sEnd - 2))
                propname = Trim(Mid(ShapeObj.AlternativeText, sStart, sEnd - 2))
                    ShapeObj.TextFrame.TextRange.Text = getProperty(propname, ShapeObj.TextFrame.TextRange.Text)
    
            End If
        Next ' obj
    
    Patric Tilge
    la source