Ich versuche, eine Lösung zu finden, um alle Zeichenabstand über alle Folien in einem einzigen PowerPoint-Dokument auf einmal zu normalisieren. Ich habe ein Makro, das es für alle Formen tun, aber es überspringt Text in Tabellen. Wenn ich jedoch msoTable in den Bereich einfüge, beginnt es mit der Verarbeitung der Folien, aber wenn es die erste Tabelle trifft, gibt es sofort einen Laufzeitfehler zurück, der behauptet, dass der angegebene Wert außerhalb des Bereichs liegt.VBA für globale PowerPoint-Zeichenabstand Normalisierung
Irgendeine Idee, was ist falsch? Ziemlich sicher, es ist eine einfache Lösung.
Sub SpacingNormalization()
On Error GoTo ErrMsg
Dim shape As shape
slideCount = ActivePresentation.Slides.Count
For i = 1 To slideCount
With ActivePresentation.Slides(i)
.Select
For Each shape In ActivePresentation.Slides(i).Shapes
If shape.Type = msoPlaceholder Or shape.Type = msoTextBox Or shape.Type = msoAutoShape Or shape.Type = msoTable Then
shape.Select
ActiveWindow.Selection.ShapeRange.TextFrame2.TextRange.Font.Spacing = 0
End If
ErrMsg:
Next
End With
Next
MsgBox ("All segments have been normalized!")
End Sub
Jede Hilfe wird wirklich geschätzt. Danke im Voraus!
Hallo Steve, danke für Ihre Eingabe. Sie haben versucht, Ihr Skript zu testen, und es scheint nicht funktional zu sein. VBA in PowerPoint durchläuft einen feinen Fixierungsabstand für alle Formen (was mein initiales Skript schon kann), aber es würde immer noch keine Tabellen fixieren. Es scheint, dass es den Call des zweiten Subs überspringt. Der Editor zeigt es als separates Sub an, und es gibt keine Möglichkeit, es separat auszuführen. Es wurde versucht, zu einem einzelnen Sub zu konsolidieren, aber es ist fehlgeschlagen. Das neue, das ich (mit Case Is =) gefunden habe, scheint zu funktionieren, aber leider musste ich es von Grund auf schreiben und es ist jetzt ein komplett anderes Skript. – Ilia
Meine schlechte ... siehe bearbeitete Version; Ich änderte Call ProcessTable (oSh) zu Call ProcessTable (oSh.Table) und es funktioniert jetzt. –
Eine andere Sache zu erinnern ist, dass eine Form, die Typ Platzhalter ist, auch eine Tabelle sein kann. Sie können also die ContainedType-Eigenschaft für das PlaceholderFormat-Objekt für Platzhalter überprüfen oder die HasTable-Eigenschaft verwenden. –