|
▼nn さん:
こんばんは。
nn さんのコードを生かす形ですと、このようになるかと思われます。
Sub test2()
Dim numShapes As Long
Dim autoShpArray() As String
Dim numAutoShapes As Long
Dim i As Long
Dim MyShape As Shape
Dim lngRow As Long
lngRow = 28
With ActiveSheet.Shapes
numShapes = .Count 'Shape数
If numShapes > 1 Then '1以上あるなら
numAutoShapes = 1
ReDim autoShpArray(1 To numShapes) 'すべてのオートシェイプを含む配列を作成
For i = 1 To numShapes
If .Item(i).Type = msoShapeRectangle Then '四角なら
autoShpArray(numAutoShapes) = .Item(i).Name
numAutoShapes = numAutoShapes + 1
End If
Next
End If
End With
For i = 1 To numAutoShapes - 1
Set MyShape = ActiveSheet.Shapes.Item(autoShpArray(i))
If MyShape.Top - (Range("H" & lngRow).Top + 4) >= -0.25 And _
MyShape.Top - (Range("H" & lngRow).Top + 4) <= 0.25 Then
MsgBox "対象の四角形は" & MyShape.Name & "かも"
End If
Next
Set MyShape = Nothing
End Sub
当方もコードを書きたての頃はなかなか理解できなかったのですが、
MyShape はオブジェクト型の変数となりますので、
値を代入するには Set ステートメントが必要になります。
Set ステートメントで変数:MyShape に Shapeオブジェクトを代入するので、
Shapeオブジェクト に存在する Topプロパティ などを使用できる様になります。
|
|