2017-09-26 6 views
0

Je cherche à écrire une macro PowerPoint généralisée pour regrouper des formes spécifiques. Le problème est que je ne connais pas les noms de formes spécifiques à l'avance car mon slidedeck change légèrement à chaque fois. Voici ma situation: J'ai une collection de formes PowerPoint dont les noms commencent par le préfixe "rc". Par exemple, ils pourraient être "rc48", "rc49", "rc50", "rc51". Ils sont toujours dans un ordre numérique croissant et les seules formes nommées "rc" sur la diapositive. Suite à ces formes, j'ai une collection de formes avec le préfixe "tx" (elles ne sont pas les seules formes "tx" dans la diapositive mais elles suivent toujours les formes "rc") et il y a toujours un nombre équivalent de "tx" "objets suivant les objets" rc ". Donc dans cet exemple, j'aurais "tx52", "tx53", "tx54", "tx55".Macros de regroupement de formes généralisées VBA PowerPoint

Ce que je voudrais faire est de regrouper ces paires d'objets. Donc, group1 serait ("rc48", "tx52"). group2 serait ("rc49", "tx53") et ainsi de suite. Je connais très peu le codage en VBA, mais mon approche dans d'autres langages de programmation serait de trouver les positions des formes "rc" dans le vecteur des noms de formes séquentielles, puis de compter la longueur (rcshapes_vector) après le "rc" positions pour trouver les formes «tx» dont j'ai besoin, puis boucle sur ces paires. Je sais que c'est une question compliquée, mais toute aide serait grandement appréciée.

Répondre

0

Travailler avec le code vba dans PowerPoint est vraiment douloureux parce que vous n'avez pas beaucoup de fonctions telles que Excel vba mais j'espère que les idées suivantes peuvent vous aider:

Vous pouvez valider le type de forme comme If oShp.Type = msoTextBox Then ou If oShp.Type = msoPicture Then.

Pour chaque forme, vous pouvez également valider la propriété supérieure ou gauche pour trouver la position dans la diapositive. Si vous êtes sûr que vos formes ont ces noms, peut-être vous pouvez essayer avec:

Dim oShp As Shape 
For Each oShp In ActivePresentation.Slides(SldNumber).Shapes 
    If oShp.Name = "rc49" Then 
     Do Something 
    End If 
next