Πριν από μερικές μέρες, ήθελα να αυτοματοποιήσω τη μάλλον πεζή εργασία της δημιουργίας κάποιων διαφανειών του PowerPoint. Κατά την αυτοματοποίηση του PowerPoint, συνήθως εργάζεστε με τη συλλογή Slides and Shapes. Οι διαφάνειες είναι μάλλον αυτονόητες και τα σχήματα είναι σχεδόν οτιδήποτε άλλο, συμπεριλαμβανομένων των πλαισίων κειμένου, των κουμπιών ενεργειών, των αντικειμένων πολυμέσων, των ετικετών, των εικόνων, των μηνυμάτων, των διαγραμμάτων ροής και ούτω καθεξής. Αν και θα παρουσιάσω τις τεχνικές με το PowerPoint, κάποια από τη σύνταξη είναι στην πραγματικότητα αρκετά εφαρμόσιμη στο Microsoft Word και στο Excel.
Απλώς για να ανακεφαλαιώσουμε, προτού ξεκινήσετε με την ανάπτυξη μακροεντολών VBA στο PowerPoint, πρέπει να ενεργοποιήσετε την καρτέλα ανάπτυξης .
Αρχικά, ας ξεκινήσουμε δημιουργώντας αυτόματα μια παρουσίαση με μερικές διαφάνειες όπως φαίνεται σε αυτό το σεμινάριο: δημιουργία παρουσίασης σε VBA .
Τώρα μπορούμε να αρχίσουμε να δουλεύουμε με τα σχήματα. Αρχικά, ας προχωρήσουμε και ας ανοίξουμε τον Επεξεργαστή VBA πατώντας Alt+ F11. Εάν ακολουθήσατε το προηγούμενο σεμινάριο, θα πρέπει να έχετε την ενότητα 1 στη λίστα Ενοτήτων (όπως φαίνεται παρακάτω)
Εργασία με σχήματα με VBA
Προσθήκη πλαισίου κειμένου με VBA
Θα ξεκινήσουμε προσθέτοντας ένα κατακόρυφο πλαίσιο κειμένου στην πρώτη μας διαφάνεια στην παρουσίαση. Προσθέστε τον ακόλουθο κώδικα στο Module1, μετά προχωρήστε και πατήστε το κουμπί Αποθήκευση (Ctrl+s) και Εκτελέστε τη μακροεντολή σας (πατήστε F5 ή πατήστε Εκτέλεση υπο/χρήστη φόρμα).
Sub CreateTextBox()
Set MySlide = ActivePresentation.Slides(2)
With MySlide.Shapes
.AddTextbox(Orientation:=msoTextOrientationVertical, _
Left:=90, Top:=200, Width:=80, _
Height:=200).TextFrame.TextRange.Text _
= ("This is my vertical text box")
End With
End Sub
Σημειώστε ότι μπορείτε να αλλάξετε το μέγεθος των διαστάσεων του πλαισίου κειμένου αρκετά εύκολα με το VBA. Σε αυτήν την περίπτωση, θα αλλάξουμε το μέγεθος του πρώτου σχήματος στη δεύτερη διαφάνεια, μη διστάσετε να το τροποποιήσετε όπως χρειάζεται.
Sub ResizeText()
Set MyShape = ActivePresentation.Slides(2).Shapes(1)
'Add your required dimensions as needed below
With MyShape
.Width = 200
.Height = 35
End With
End Sub
Εφέ κειμένου με VBA
Ας υποθέσουμε τώρα ότι θέλουμε να προσθέσουμε ένα πλαίσιο κειμένου σε όλες τις διαφάνειες της παρουσίασης, αυτή τη φορά λίγο πιο ελκυστικό οπτικά. Για να το κάνουμε αυτό, θα χρησιμοποιήσουμε το VBA για να δημιουργήσουμε προσαρμοσμένα εφέ κειμένου τα οποία μπορούμε να ενσωματώσουμε σε μία ή περισσότερες διαφάνειες στην παρουσίαση. Πρώτα θα κάνουμε κύκλο στις διαφάνειες της παρουσίασης και στη συνέχεια θα προσθέσουμε το εφέ κειμένου όπως απαιτείται.
Sub SetEffects()
Dim i As Integer
For i = 1 To ActivePresentation.Slides.Count
ActivePresentation.Slides(i) _
.Shapes.AddTextEffect msoTextEffect12, "Draft for Review", _
"Segoe UI", 32, msoTrue, msoTrue, 650, 50
Next
End Sub
Ιδού το αποτέλεσμα ;-):
Σημειώστε ότι μπορείτε επίσης να χρησιμοποιήσετε ένα απλό υδατογράφημα για να επιτύχετε αυτό το συγκεκριμένο αποτέλεσμα.
Επεξηγήσεις PowerPoint με VBA
Το επόμενο παράδειγμα μας θα είναι η προσθήκη μηνυμάτων προώθησης στην παρουσίασή σας. Σε αυτό το παράδειγμα θα προσθέσουμε ένα μήνυμα στη δεύτερη διαφάνεια.
Sub CreateCallout()
ActivePresentation.Slides(2).Shapes.AddCallout(Type:=msoCalloutTwo, Left:=200, Top:=50, _ Width:=300, Height:=100).TextFrame.TextRange.Text = "My Callout"
End Sub
Ρύθμιση ιδιοτήτων για ένα σχήμα
Πολλές ιδιότητες μορφοποίησης σχημάτων δεν ορίζονται από ιδιότητες που ισχύουν απευθείας στο αντικείμενο Shape ή ShapeRange . Αντίθετα, τα σχετικά χαρακτηριστικά σχήματος ομαδοποιούνται σε δευτερεύοντα αντικείμενα, όπως το αντικείμενο FillFormat , το οποίο περιέχει όλες τις ιδιότητες που σχετίζονται με το γέμισμα του σχήματος ή το αντικείμενο LinkFormat , το οποίο περιέχει όλες τις ιδιότητες που είναι μοναδικές για συνδεδεμένα αντικείμενα OLE. Για να ορίσετε ιδιότητες για ένα σχήμα, πρέπει πρώτα να επιστρέψετε το αντικείμενο που αντιπροσωπεύει το σύνολο των σχετικών χαρακτηριστικών σχήματος και, στη συνέχεια, να ορίσετε ιδιότητες αυτού του επιστρεφόμενου αντικειμένου. Για παράδειγμα, χρησιμοποιείτε την ιδιότητα Fill για να επιστρέψετε το αντικείμενο FillFormat και, στη συνέχεια, ορίζετε την ιδιότητα ForeColor του αντικειμένου FillFormat για να ορίσετε το χρώμα προσκηνίου γέμισης για το καθορισμένο σχήμα, όπως φαίνεται στο ακόλουθο παράδειγμα.
VB
Set myDocument = ActivePresentation.Slides(1)
myDocument.Shapes(1).Fill.ForeColor.RGB = RGB(255, 0, 0)
Εφαρμογή μιας ιδιότητας ή μιας μεθόδου σε πολλά σχήματα ταυτόχρονα
Στη διεπαφή χρήστη, υπάρχουν ορισμένες λειτουργίες που μπορείτε να εκτελέσετε με επιλεγμένα διάφορα σχήματα. για παράδειγμα, μπορείτε να επιλέξετε πολλά σχήματα και να ορίσετε όλα τα μεμονωμένα γεμίσματα ταυτόχρονα. Υπάρχουν άλλες λειτουργίες που μπορείτε να εκτελέσετε μόνο με επιλεγμένο ένα σχήμα. για παράδειγμα, μπορείτε να επεξεργαστείτε το κείμενο σε σχήμα μόνο εάν έχει επιλεγεί ένα μεμονωμένο σχήμα.
Στη Visual Basic, υπάρχουν δύο τρόποι για να εφαρμόσετε ιδιότητες και μεθόδους σε ένα σύνολο σχημάτων. Αυτοί οι δύο τρόποι σάς επιτρέπουν να εκτελέσετε οποιαδήποτε λειτουργία που μπορείτε να εκτελέσετε σε ένα μεμονωμένο σχήμα σε μια σειρά σχημάτων, είτε μπορείτε να εκτελέσετε την ίδια λειτουργία στη διεπαφή χρήστη είτε όχι.
-
Εάν η λειτουργία λειτουργεί σε πολλά επιλεγμένα σχήματα στη διεπαφή χρήστη, μπορείτε να εκτελέσετε την ίδια λειτουργία στη Visual Basic δημιουργώντας μια συλλογή ShapeRange που περιέχει τα σχήματα με τα οποία θέλετε να εργαστείτε και εφαρμόζοντας τις κατάλληλες ιδιότητες και μεθόδους απευθείας στη συλλογή ShapeRange .
-
Εάν η λειτουργία δεν λειτουργεί σε πολλά επιλεγμένα σχήματα στη διεπαφή χρήστη, μπορείτε ακόμα να εκτελέσετε τη λειτουργία στη Visual Basic κάνοντας κύκλο στη συλλογή Shapes ή μέσω μιας συλλογής ShapeRange που περιέχει τα σχήματα με τα οποία θέλετε να εργαστείτε κα�� εφαρμόζοντας τις κατάλληλες ιδιότητες και μεθόδους για τα μεμονωμένα αντικείμενα Shape στη συλλογή.
Πολλές ιδιότητες και μέθοδοι που ισχύουν για το αντικείμενο Shape και τη συλλογή ShapeRange αποτυγχάνουν εάν εφαρμοστούν σε ορισμένα είδη σχημάτων. Για παράδειγμα, η ιδιότητα TextFrame αποτυγχάνει εάν εφαρμοστεί σε ένα σχήμα που δεν μπορεί να περιέχει κείμενο. Εάν δεν είστε βέβαιοι ότι κάθε σχήμα σε μια συλλογή ShapeRange μπορεί να έχει μια συγκεκριμένη ιδιότητα ή μέθοδο που εφαρμόζεται σε αυτό, μην εφαρμόσετε την ιδιότητα ή τη μέθοδο στη συλλογή ShapeRange . Εάν θέλετε να εφαρμόσετε μία από αυτές τις ιδιότητες ή μεθόδους σε μια συλλογή σχημάτων, πρέπει να κάνετε κύκλο στη συλλογή και να δοκιμάσετε κάθε μεμονωμένο σχήμα για να βεβαιωθείτε ότι είναι κατάλληλος τύπος σχήματος πριν εφαρμόσετε την ιδιότητα ή τη μέθοδο σε αυτό.
Εφαρμογή μιας ιδιότητας ή μιας μεθόδου σε μια συλλογή ShapeRange
Εάν μπορείτε να εκτελέσετε μια λειτουργία σε πολλά επιλεγμένα σχήματα στη διεπαφή χρήστη ταυτόχρονα, μπορείτε να κάνετε το ισοδύναμο μέσω προγραμματισμού κατασκευάζοντας μια συλλογή ShapeRange και στη συνέχεια εφαρμόζοντας τις κατάλληλες ιδιότητες ή μεθόδους σε αυτήν. Το παρακάτω παράδειγμα κατασκευάζει ένα εύρος σχημάτων που περιέχει τα AutoShapes με το όνομα "Big Star" και "Little Star" και εφαρμόζει ένα γέμισμα διαβάθμισης σε αυτά και εφαρμόζει ένα γέμισμα διαβάθμισης σε αυτά.myDocument
VB
Set myDocument = ActivePresentation.Slides(1)
Set myRange = myDocument.Shapes _
.Range(Array("Big Star", "Little Star"))
myRange.Fill.PresetGradient msoGradientHorizontal, _
1, msoGradientBrass
Ακολουθούν γενικές οδηγίες για το πώς συμπεριφέρονται οι ιδιότητες και οι μέθοδοι όταν εφαρμόζονται σε μια συλλογή ShapeRange .
-
Η εφαρμογή μιας μεθόδου στη συλλογή ισοδυναμεί με την εφαρμογή της μεθόδου σε κάθε μεμονωμένο αντικείμενο Shape σε αυτήν τη συλλογή.
-
Ο ορισμός της τιμής μιας ιδιότητας της συλλογής είναι ισοδύναμος με τον ορισμό της τιμής της ιδιότητας κάθε μεμονωμένου σχήματος σε αυτό το εύρος.
-
Μια ιδιότητα της συλλογής που επιστρέφει μια σταθερά επιστρέφει την τιμή της ιδιότητας για ένα μεμονωμένο σχήμα στη συλλογή εάν όλα τα σχήματα της συλλογής έχουν την ίδια τιμή για αυτήν την ιδιότητα. Εάν δεν έχουν όλα τα σχήματα της συλλογής την ίδια τιμή για την ιδιότητα, επιστρέφει τη σταθερά "μικτή".
-
Μια ιδιότητα της συλλογής που επιστρέφει έναν απλό τύπο δεδομένων (όπως Long , Single ή String ) επιστρέφει την τιμή της ιδιότητας για ένα μεμονωμένο σχήμα εάν όλα τα σχήματα της συλλογής έχουν την ίδια τιμή για αυτήν την ιδιότητα.
-
Η τιμή ορισμένων ιδιοτήτων μπορεί να επιστραφεί ή να οριστεί μόνο εάν υπάρχει ακριβώς ένα σχήμα στη συλλογή. Εάν υπάρχουν περισσότερα από ένα σχήματα στη συλλογή, παρουσιάζεται σφάλμα χρόνου εκτέλεσης. Αυτό ισχύει γενικά για την επιστροφή ή τη ρύθμιση ιδιοτήτων όταν η ισοδύναμη ενέργεια στη διεπαφή χρήστη είναι δυνατή μόνο με ένα μόνο σχήμα (ενέργειες όπως η επεξεργασία κειμένου σε ένα σχήμα ή η επεξεργασία των σημείων μιας ελεύθερης μορφής).
Οι προηγούμενες οδηγίες ισχύουν επίσης όταν ορίζετε ιδιότητες σχημάτων που ομαδοποιούνται σε δευτερεύοντα αντικείμενα της συλλογής ShapeRange , όπως το αντικείμενο FillFormat . Εάν το δευτερεύον αντικείμενο αντιπροσωπεύει λειτουργίες που μπορούν να εκτελεστούν σε πολλά επιλεγμένα αντικείμενα στη διεπαφή χρήστη, θα μπορείτε να επιστρέψετε το αντικείμενο από μια συλλογή ShapeRange και να ορίσετε τις ιδιότητές του. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε την ιδιότητα Fill για να επιστρέψετε το αντικείμενο FillFormat που αντιπροσωπεύει τα γεμίσματα όλων των σχημάτων στη συλλογή ShapeRange . Η ρύθμιση των ιδιοτήτων αυτού του αντικειμένου FillFormat θα ορίσει τις ίδιες ιδιότητες για όλα τα μεμονωμένα σχήματα στη συλλογή ShapeRange .
Περιήγηση σε μια συλλογή Shapes ή ShapeRange
Ακόμα κι αν δεν μπορείτε να εκτελέσετε μια λειτουργία σε πολλά σχήματα στη διεπαφή χρήστη ταυτόχρονα, επιλέγοντάς τα και στη συνέχεια χρησιμοποιώντας μια εντολή, μπορείτε να εκτελέσετε την αντίστοιχη ενέργεια μέσω προγραμματισμού κάνοντας loop μέσω της συλλογής Shapes ή μέσω μιας συλλογής ShapeRange που περιέχει τα σχήματα που θέλετε να εργαστείτε και να εφαρμόσετε τις κατάλληλες ιδιότητες και μεθόδους στα μεμονωμένα αντικείμενα Shape στη συλλογή. Το παρακάτω παράδειγμα κάνει κύκλους σε όλα τα σχήματα και προσθέτει κείμενο σε κάθε σχήμα που είναι AutoShape. και προσθέτει κείμενο σε κάθε σχήμα που είναι AutoShape.myDocument
VB
Set myDocument = ActivePresentation.Slides(1)
For Each sh In myDocument.Shapes
If sh.Type = msoAutoShape Then
sh.TextFrame.TextRange.InsertAfter " (version 1)"
End If
Next
Το παρακάτω παράδειγμα κατασκευάζει τη συλλογή ShapeRange που περιέχει όλα τα επιλεγμένα σχήματα στο ενεργό παράθυρο και ορίζει το κείμενο σε κάθε σχήμα της συλλογής που μπορεί να περιέχει κείμενο.
VB
For Each sh in ActiveWindow.Selection.ShapeRange
If sh.HasTextFrame Then
sh.TextFrame.TextRange = "Initially selected"
End If
Next
Ευθυγράμμιση, διανομή και ομαδοποίηση σχημάτων σε ένα εύρος σχημάτων
Χρησιμοποιήστε τις μεθόδους Στοίχιση και κατανομή για να τοποθετήσετε ένα σύνολο σχημάτων σε σχέση μεταξύ τους ή σε σχέση με το έγγραφο που τα περιέχει. Χρησιμοποιήστε τη μέθοδο Group ή τη μέθοδο Regroup για να σχηματίσετε ένα ενιαίο ομαδοποιημένο σχήμα από ένα σύνολο σχημάτων.