Ich habe etwa 70 Formen in einem Planungsdokument, das ich für die Arbeit verwende. Alles ist in Ordnung, aber ich versuche, eine neue Funktion hinzuzufügen. Diese Formen werden jede Woche mithilfe von Bearbeitungspunkten geändert, um auf einer Karte angezeigt zu werden. Manchmal wird Form „A“ jedoch nicht verwendet, sodass ich sie zusammen mit allen anderen Formen einfach auf die Standardgröße zurücksetzen möchte. Weiß jemand, wie ich dies über ein Makro erreichen kann? Ich habe viele Dinge ausprobiert und überall gesucht, aber ich bin mit meinem Latein am Ende ...
Wenn eine Form nicht die Standardform ist, stellen Sie alle nicht standardmäßigen Formen auf die Standardgröße ein.
Dank im Voraus
Antwort1
Ich weiß nicht, wo Excel die Standardhöhe und -breite für Formen speichert. Ich gehe davon aus, dass Sie mit Standard die Größe der Form meinen, wenn Sie zum Platzieren klicken, anstatt sie durch Ziehen zu vergrößern. Ovale sind beispielsweise 72 x 72 groß. Dasselbe gilt für Quadrate.
Eine Möglichkeit, dies zu tun, besteht darin, die AlternativeText-Eigenschaft der Form zu verwenden. Sie können die Standardgrößen in dieser Eigenschaft speichern. Klicken Sie mit der rechten Maustaste auf die Form, wählen Sie „AutoForm formatieren“, gehen Sie zur Registerkarte „Web“ und geben Sie 72|72 ein. Ich verwende das Pipe-Zeichen als Trennzeichen zwischen Breite und Höhe. Sie müssten die Standardgröße für jeden Formtyp herausfinden, aber wie gesagt, ich weiß nicht, wo Excel sie speichert. Sobald Sie die AlternativeText-Eigenschaft festgelegt haben, können Sie Code wie den folgenden verwenden
Sub FixShape()
Dim shp As Shape
Dim vaDefault As Variant
Const sDELIM = "|"
For Each shp In Sheet1.Shapes
If Len(shp.AlternativeText) > 0 Then
vaDefault = Split(shp.AlternativeText, sDELIM)
shp.Width = vaDefault(0)
shp.Height = vaDefault(1)
End If
Next shp
End Sub
Dadurch wird jede Form, die etwas in Alternativtext hat, auf die von Ihnen aufgezeichnete Breite und Höhe eingestellt. Dies setzt voraus, dass Sie Alternativtext nicht für etwas anderes verwenden.
Wenn Sie AlternativeText nicht zum Speichern verwenden möchten, können Sie die Werte in VBA fest codieren
Sub FixShape2()
Dim shp As Shape
Const lDEFOVALHEIGHT As Long = 72
Const lDEFOVALWIDTH As Long = 72
Const lDEFSQRHEIGHT As Long = 72
Const lDEFSQRWIDTH As Long = 72
For Each shp In Sheet1.Shapes
Select Case shp.AutoShapeType
Case msoShapeOval
shp.Height = lDEFOVALHEIGHT
shp.Width = lDEFOVALWIDTH
Case msoShapeRectangle
shp.Height = lDEFSQRHEIGHT
shp.Width = lDEFSQRWIDTH
End Select
Next shp
End Sub