[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ShapeのIndexの取得方法について』(にゅるん)
選択した図形に対してアレコレするVBAを書いていて、疑問に思ったことの質問です。
単一の図形(Picture)を選んだ時にShape型変数が欲しい時は
Selection.ShapeRange(1) ActiveSheet.Shapes(Selection.Index) ActiveSheet.Shapes(Selection.Name)
で取得できますよね。
しかし一度Shapeに格納してしまうとIndexプロパティが無いため知りたいと思った時に取得する方法がわかりません。
ウォッチで見るとShape.DrawingObjectの中にIndexが有るみたいですが、何故かVBA上ではDrawingObjectが使用できません。
どうしたらIndexが取得できますか?
※ZOrderPositionがIndexと同じ値を示しているようですが偶然でしょうか?
< 使用 Excel:Excel2016、使用 OS:Windows10 >
ZOrderPositionプロパティは重ねる際の順番であり、図形を置いた順に自動的に振られているので、インデックスと同じなのはたまたまです。
(???) 2018/11/02(金) 12:01
? ActiveSheet.DrawingObjects("Oval 1").Name ? ActiveSheet.DrawingObjects(1).Index (???) 2018/11/02(金) 14:32
過去の質問も読ませていただきましたが、結果的にIndexを取得しない方向で解決しているみたいです。
先の質問にも有るように.Nameは同一の物を持つことが可能です。
Shapes()の指定に.Nameで得た情報を使うと先頭のシェイプを検出してしまうため、どうにかして一意に特定出来る情報をShapeから値型で取り出す必要があります。
>ZOrderPositionプロパティは重ねる際の順番であり、図形を置いた順に自動的に振られているので、インデックスと同じなのはたまたまです。
そうですよね。少し期待してしまいました。
>DrawingObjectsの使い方が判れば良いというならば、
Shapeのプロパティにあるように見えるDrawingObjectsが使いたかったのですが・・・。
他にご存知の方がいましたら、よろしくおねがいします。
(にゅるん) 2018/11/02(金) 14:46
? ActiveSheet.shapes(1).DrawingObject.Index
shapes(1)のIndex は 1。 名前指定しても、重複していたら区別が付かないのは同じでしょう。
そして、名前をキーにしたいならば、図形を貼る際にユニークな名前を付ければ良いだけです。 デフォルトでも必ず違う数字になるので、重複があるという事は、自分で名前を変えてますよね? 例えば日毎に1つの図形なら、名称に年月日を加えるとかで、簡単にユニークにできる事でしょう。
(???) 2018/11/02(金) 14:57
なにを勘違いしていたのか、Shapeの下にDrawingObjectを書いたら動きました。
インテリセンスが効かない上に、おそらく最後にsを付けていたので使えないものだと勘違いしたと思われます。
一応補足すると名前が重複するのは、古いバージョンのエクセルから持ってきた図形をコピーするからです。
手動で名前を付けた図形をコピーしても重複しますが。
コピーのたびに名前を付け直す運用は困難だと思われます。
ただし取得するマクロを走らせた時点で重複がないように名前の後ろに連番を振り直すというのはアリかもしれません。
少しコネコネしてみます。
(にゅるん) 2018/11/02(金) 15:11
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.