2017-11-13 13 views
1

私はいくつかの写真があるシートを持っています。これらはすべて元の画像のコピー貼りですので、すべて同じ名前の「花」です。同じ名前の複数のオブジェクトを選択する

私はそれらのすべてを選択し、それらを反転したいと思います。しかし、それはオリジナルを選択するだけです、どのようにこれを過去にするのですか?私は運もなくループを組み込んでみました。

Sub Test() 
    ActiveSheet.Shapes.Range(Array("Flower")).Select 
    Selection.ShapeRange.Flip msoFlipHorizontal 
End Sub 

は、私は単にFlower1、Flower2などにそれらの名前を変更することができることを知っているが、計画はたくさんの写真のためにこれを使用することですので、それは手動で変更するのに長いにかかるだろう。ループを使ってすべてを行うことができれば、うまくいくでしょうが、それでも私は上記と同じ問題を抱えています。

答えて

2

コレクションShapesをループして、指定された名前の図形を検索することができます。これを試して。

Sub Test() 
    Dim Pic As Shape 
    For Each Pic In ActiveSheet.Shapes 
     If Pic.Name = "Flower" Then Pic.Flip msoFlipHorizontal 
    Next Pic 
End Sub 

さらに、これを選択せず​​にコードすることもできます。より迅速で信頼性の高い

+0

ありがとう、魅力的なように働いてくれてありがとう! –

1

有用なVBAには、Shapesという名前のシェイプコレクションとShapeという2つのオブジェクトがあります。したがって、次のようにコレクションをループすることができます:

Sub Test() 

    Dim shShape   As Shape 
    Dim shCollection As Shapes 

    Set shCollection = ActiveSheet.Shapes 

    For Each shShape In shCollection 
     shShape.Flip msoFlipHorizontal 
    Next shShape 

End Sub 
+0

こんにちは、私はオブジェクトを直接使用するのではなく、まず 'shCollection'オブジェクトを設定する利点が何であるか興味がありますか? – newacc2240

+1

@ newacc2240 - このケースでは特定のケース - 利点はありません。しかし、これを2回実行しなければならず、ワークシートをブラウズしている場合、 'ActiveSheet.Shape'は少し信頼性がありません。 – Vityata

+0

入手しました。しかし、変数を最初に設定してから、複数のワークシートを参照する必要がある場合は、 'ws.Shapes'を呼び出すことをお勧めします。ありがとうございました:) – newacc2240

関連する問題