最も簡単な方法は、他の形がないところにサインすることです。範囲がM11:Q31
であると仮定しましょう。このサブは、左上のセルがその範囲にあるすべての図形の高さと幅の半分になります(N11
で始まる「背景」は影響を受けません)。
Sub kjhdrle()
Dim x As Variant, y As String
y = ""
For Each x In ActiveSheet.Shapes
If Not Intersect(x.TopLeftCell, [M11:Q31]) Is Nothing Then
If y = "" Then
y = x.Name
Else
y = y & vbLf & x.Name
End If
End If
Next
If y = "" Then Exit Sub
ActiveSheet.Shapes.Range(Split(y, vbLf)).Select
If InStr(y, vbLf) Then Selection.ShapeRange.Group.Select
Selection.ShapeRange.ScaleWidth 0.5, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 0.5, msoFalse, msoScaleFromTopLeft
End Sub
私はできるだけシンプルにしました。複数のアイテムがある場合は、アイテムをグループ化してサイズを変更すると、アンカーも拡大/縮小されます。 (なしでは、各要素はそれ自身のアンカーで縮小するでしょう)。
異なる方法では、名前の前に「not_me_」などのような処理をしたくないシェイプの名前の自動変更があります。次に、コードを実行するときに、その文字列で始まるシェイプを無視するだけです。そして処理後、サブで使用されている図形は"not_me_" & [shape].name
に改名されますので、次回無視されます)
まだ質問がある場合は、質問してください。
あなたが試したこととエラーが表示された理由、またはそれが望んでいなかった理由を表示できます – dbmitch
マクロをトリガするのは何ですか? –
@dbmitch今、私は次の "ActiveSheet.Shapes.SelectAllを試しています MsgBox ActiveSheet.Shapes(Application.Caller).Name"と私は取得しています "指定された名前の項目が見つかりませんでした – himura