我在工作中使用的規劃文件中有大約 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