2014-06-13 3 views
0

J'ai un ppt qui est en cours d'enregistrement en format pdf pour l'utiliser comme catalogue. J'aimerais pouvoir nommer les formes de texte en fonction d'un identifiant de produit unique, puis les mettre à jour en fonction d'une connexion à une base de données d'accès. Je peux nommer les formes et mettre à jour les valeurs avec vba en utilisant une boîte de saisie (pour tester) mais je n'arrive pas à comprendre comment faire défiler toutes les formes et mettre à jour le texte en fonction des critères d'identification uniques. Voici ce que j'utilise pour tester le changement de nom et la mise à jour depuis une boîte de saisie.Mise à jour Powerpoint VBA Forme à partir de la base de données

Sous UpdateShape() Dim oShape Comme forme

Dim objName 
On Error GoTo CheckErrors 
If ActiveWindow.Selection.ShapeRange.Count = 0 Then 
    MsgBox "You need to select a shape first" 
    Exit Sub 
End If 
objName = ActiveWindow.Selection.ShapeRange(1).Name 

objName = InputBox$("Assign a new name and value to this shape", "Update Shape", objName) 
    If objName <> "" Then 
    ActiveWindow.Selection.ShapeRange(1).Name = objName 
    ActiveWindow.Selection.ShapeRange(1).TextFrame.TextRange.Text = objName 
End If 

Exit Sub 

CheckErrors: MsgBox Err.Description

End Sub

Ce que j'ai à l'esprit est pour le créateur de catalogue pour nommer le formes basées sur les images qu'ils mettent dans le catalogue. Le prix proviendra de la base de données en fonction du client pour lequel le catalogue est créé. Je voudrais que la vba parcourt les enregistrements de la base de données et renvoie le prix de vente en fonction de l'appariement de l'ID du produit avec le nom de la forme.

J'ai essayé d'utiliser Set oShape = ActivePresentation.Slides ("MySlide"). Formes ("myShape") et oShape.TextFrame.TextRange.Text = "objName"

Mais je ne peux pas obtenir le texte mise à jour et je ne peux pas comprendre comment utiliser une variable à la place de "MySlide"

Le nom de la table est tblProduct. Le nom du champ d'identifiant de produit est productid. le nom du champ de prix de vente est saleprice.

J'apprécie toute aide que je peux obtenir.

Merci

Répondre

0

Pour localiser et modifier une forme nommée qui pourrait apparaître nulle part dans la présentation, vous aurez besoin de boucler à travers toutes les formes sur toutes les diapositives afin de localiser celui que vous avez besoin. Il déclenche beaucoup de passages à travers la présentation, mais ne devrait pas prendre autant de temps à compléter. Quelques secondes même sur de grandes présentations/beaucoup de remplacements.

Sub Test() 
    ' Call UpdateText for each replacement 
    UpdateText "This", "This is the text for shape named THIS" 
    UpdateText "That", "This is the text for shape named THAT" 
    UpdateText "The Other", "This is the text for shape named THE OTHER" 
End Sub 
Function UpdateText(sShapeName As String, sNewText As String) 
    Dim oSl As Slide 
    Dim oSh As Shape 

    For Each oSl In ActivePresentation.Slides 
     For Each oSh In oSl.Shapes 
      If UCase(oSh.Name) = UCase(sShapeName) Then 
       oSh.TextFrame.TextRange.Text = sNewText 
      End If 
     Next 
    Next 
End Function 
+0

Steve, C'est exactement ce que je cherchais! Je l'ai travailler avec mes variables. Je vais travailler sur l'ouverture de la requête d'accès pour faire défiler les enregistrements pour mettre à jour chacun des champs. Merci beaucoup d'avoir pris le temps de répondre à ma question. – user3737686

+0

Je me suis sorti d'une autre vente de mon complément Merge, n'est-ce pas? ;-) –

0

Je ne comprends pas le problème que vous rencontrez, mais pour commencer, il y a quelques problèmes avec votre code nommant la forme ci-dessus. Voir les commentaires et essayez le semi-code aérien ci-dessous.

Sub UpdateShape() 

Dim oShape As Shape 

' not strictly necessary, but generally best practice 
' to dim variables as the correct type 
Dim objName As String 

On Error GoTo CheckErrors 

' This won't work .... it throws error if no selection 
'If ActiveWindow.Selection.ShapeRange.Count = 0 Then 

If ActiveWindow.Selection.Type = ppSelectionShapes Then 
    If ActiveWindow.Selection.ShapeRange.Count = 1 Then 

     objName = ActiveWindow.Selection.ShapeRange(1).Name 
     objName = InputBox$("Assign a new name and value to this shape", "Update Shape", objName) 
      If objName <> "" Then 
       ActiveWindow.Selection.ShapeRange(1).Name = objName 
       ActiveWindow.Selection.ShapeRange(1).TextFrame.TextRange.Text = objName 
      End If 
      Exit Sub 
    End If 
End If 

MsgBox "You must choose one and only one shape first" 
Exit Sub 

CheckErrors: MsgBox Err.Description 

End Sub 
Questions connexes