2016-09-17 3 views
2

J'ai cet extrait de code qui fonctionne bien, sauf pour la dernière ligne lorsque j'essaie d'aligner le texte au centre. msoAlignRight était juste à des fins de test pour voir si elle se déplace vers la droite ... mais rien ne se passe. - edit: J'ai incorporé ceci de Qlikview à la macro PPT, ne devrait pas importer cependant.Alignement de texte dans VBA PowerPoint 2013

NOTE: Je voudrais que le texte 0 soit centré sur le texte. Maintenant, c'est à gauche.

Sub ppt 

'Set ppt template 
filePath_template = "...\Template.pptx" 

'Remove filters 
ActiveDocument.ClearAll() 

'Retrieve all accounts 
set field1Values = ActiveDocument.Fields("name").GetPossibleValues 


ActiveDocument.ActivateSheetByID "ABC01" 
for i = 0 to 15 
ActiveDocument.Fields("name").Clear 
ActiveDocument.GetApplication.WaitForIdle 100 
'Set filter on just 1 account 
ActiveDocument.Fields("name").Select field1Values.Item(i).Text 

ActiveDocument.GetApplication.Sleep 5000 

ActiveDocument.GetApplication.WaitForIdle 100 
'Create a ppt object 
Set objPPT = CreateObject("PowerPoint.Application") 
objPPT.Visible = True 
'Open the ppt template 
Set objPresentation = objPPT.Presentations.Open(filePath_template) 

Set PPSlide = objPresentation.Slides(1) 

'leText 2 
ActiveDocument.GetSheetObject("TEXT001").CopyTextToClipboard 
ActiveDocument.GetApplication.WaitForIdle 100 
Set leText2 = PPSlide.Shapes.Paste 
leText2.Top = 280 
leText2.Left = 310 
leText2.Width = 300 
leText2.TextFrame.TextRange.Font.Size = 8 

ActiveDocument.GetApplication.Sleep 1000 

for k = 0 to 10 
ActiveDocument.GetApplication.WaitForIdle 100 
ActiveDocument.ActiveSheet.CopyBitmapToClipboard 
ActiveDocument.GetApplication.WaitForIdle 100 
next 

ActiveDocument.GetApplication.WaitForIdle 100 

'leText 0 
ActiveDocument.GetSheetObject("TEXT002").CopyTextToClipboard 
ActiveDocument.GetApplication.WaitForIdle 100 
Set leText0 = PPSlide.Shapes.Paste 
leText0.Top = 1 
leText0.Left = 150 
leText0.Width = 700 
leText0.TextFrame.TextRange.Font.Size = 12 
leText0.TextFrame.TextRange.Font.Color = vbWhite 

'Save ppt 
filePath = "...\SaveFolder\" & field1Values.Item(i).Text & ".pptx" 
objPresentation.SaveAs filePath 
Next 
objPPT.Quit 

End Sub 
+0

essayer mon code ci-dessous, laissez-moi savoir si cela fonctionne –

Répondre

0

Modifier la ligne "Aligné à droite" à:

leText.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignRight 

Une autre amélioration possible de votre morceau de code, sera en utilisant With 'comme:

With leText 
    .Top = 12 
    .Left = 250 
    .Width = 500 
    .TextFrame.TextRange.Font.Size = 14 
    .TextFrame.TextRange.Font.Color = vbWhite 
    .TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignRight 
End With 
+0

Salut Shai, ça n'a pas marché. Je l'avais essayé aussi :( – Probs

+0

Avez-vous reçu un message d'erreur? Vous avez remarqué que vous changez le texte en blanc, il est donc difficile de voir la police.Quel type d'objet est-il? Zone de texte? Table? –

+0

Cela fait partie d'un code plus grand, donc l'arrière-plan est sombre .Mais je mets cet alignement à la fin et ça ne fait rien.Si je le mets avant par exemple Font.Size, il s'arrête juste là, il arrête de traiter le code. Il ne fait que copier le texte de Qlikview, donc c'est un textbox régulier – Probs

0

Quel type de variable ont vous avez déclaré leText comme? Il devrait être Shappe que vous traitez un seul objet, mais la méthode de pâte retourne un objet de type ShapeRange pour que vous puissiez obtenir la forme unique en utilisant cette ligne:

Set leText = PPSlide.Shapes.Paste(1) 

En outre, si ce code est en cours d'exécution dans Excel et vous utilisez une liaison anticipée, je suppose que vous avez défini une référence à la bibliothèque PowerPoint pour que la valeur ppAlignRight soit connue, si vous utilisez une liaison tardive, vous devrez la définir vous-même. Enfin, pour MSO 2007 et versions ultérieures, je recommande d'utiliser les objets TextFrame2 (et TextRange2) les plus récents car ils ont plus de propriétés disponibles à partir du moteur graphique mis à jour.

+0

Cela ne fonctionne pas non plus .. – Probs

0

Étant donné que la méthode CopyTextToClipboard est une API QV, je ne suis pas sûr si la forme est copiée ou le texte dans la forme (ou TextRange). Essayez ceci: une fois que la macro a créé la leText0 de forme, sélectionnez-le dans PowerPoint, définir la justification à gauche et entrez cette commande dans la fenêtre immédiate: ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter

Notez que ppAlignCenter = 2

Que se passe-t-il?

Si l'API ne copie que le texte, je me serais attendu à ce que vous deviez d'abord créer la forme dans PowerPoint, puis copier le texte du presse-papiers dans le TextRange de la forme. Pour tester cela, remplacer ces lignes:

'leText 2 
ActiveDocument.GetSheetObject("TEXT001").CopyTextToClipboard 
ActiveDocument.GetApplication.WaitForIdle 100 
Set leText2 = PPSlide.Shapes.Paste 
leText2.Top = 280 
leText2.Left = 310 
leText2.Width = 300 
leText2.TextFrame.TextRange.Font.Size = 8 

... avec ces:

'leText 2 
ActiveDocument.GetSheetObject("TEXT001").CopyTextToClipboard 
ActiveDocument.GetApplication.WaitForIdle 100 
With PPSlide.Shapes.AddShape(msoShapeRectangle, 310, 280, 300, 0) 
    With .TextFrame 
    .WordWrap = msoFalse 
    .AutoSize = ppAutoSizeShapeToFitText 
    With .TextRange 
     .Paste 
     .ParagraphFormat.Alignment = ppAlignCenter 
     .Font.Size = 8 
    End With 
    End With 
End With 
+0

Salut, ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter fonctionne, cependant .. il semble que Qlikview ne reconnaît pas la fonction Avec lorsque je remplace votre code dans le mien. Comment puis-je lancer ppAlignCenter sans Qlikview? Cela fonctionne-t-il seulement pour tous les Powerpoints? – Probs

+0

Je ne suis pas sûr de comprendre ce truc de QV maintenant! N'éditez-vous pas VBA dans Microsoft VBE? –

+0

Oh non en fait dans Qlikview. Cependant, j'ai également essayé d'exécuter ce morceau de code particulier pour tous les fichiers PowerPoint ouverts, mais n'a pas réussi. Il ne peut le faire que pour le powerpoint sélectionné qui est déjà ouvert - un seul. – Probs