將 Excel 中的形狀恢復為預設值

將 Excel 中的形狀恢復為預設值

我在工作中使用的規劃文件中有大約 70 個形狀,一切都很好,但我正在嘗試添加一個新功能。每週使用編輯點更改這些形狀以顯示在地圖上,但有時可能不會使用形狀“A”,我只想將其與所有其他形狀一起返回到預設大小。有誰知道我如何透過巨集實現這一點,我嘗試了很多東西並到處搜索,但我束手無策......

如果形狀不是預設形狀,請將所有非預設形狀設為預設大小。

先致謝

答案1

我不知道 Excel 在哪裡儲存形狀的預設高度和寬度。我假設預設情況下,您指的是單擊放置而不是拖曳到大小時形狀的大小。例如,橢圓形的尺寸為 72x72。對於正方形也是如此。

實現此目的的一種方法是使用形狀的 AlternativeText 屬性。您可以在此屬性中儲存預設尺寸。右鍵單擊形狀,選擇“設定自動形狀格式”,轉到“Web”選項卡,然後輸入 72|72。我使用管道作為寬度和高度之間的分隔符號。您必須弄清楚每種形狀的預設大小是多少,但就像我說的,我不知道 Excel 將其儲存在哪裡。設定 AlternativeText 屬性後,您可以使用下列程式碼

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

這會將 AlternativeText 中包含某些內容的每個形狀設定為您記錄的寬度和高度。這假設您沒有將 AlternativeText 用於其他用途。

如果您不想使用 AlternativeText 來儲存它,您可以在 VBA 中對值進行硬編碼

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

相關內容