当ブログを訪れた方の検索キーワードに、以下が含まれていた。
Elbow Connector だけ選択
折角なので、挑戦してみる。
まず、コネクタのエルボを、どのように指定するか調べてみる。
取り敢えず、VBEのオブジェクトブラウザで検索する。
すると、1個だけヒットした。
1個だけというのが、ありがたい。迷わなくて済む。
こちらを見ると、
Const msoConnectorElbow=2
と書いてある。
半年前の私なら「2」だから、引数の型をLongで受けとるマクロを作成していたに違いない。しかし最近は少し知恵がついた。こんな感じで受け取ることにしよう。
Sub SelectConnecter(connector_type As Office.MsoConnectorType) End Sub
さて、Elbow Connector だけ選択したい訳なので、こんな場合はループを用いる。総数が分からないので、For Each を使うことにしよう。こんな感じだ。
Sub SelectConnecter(connector_type As Office.MsoConnectorType) Dim Shape As Shape For Each Shape In ActiveSheet.Shapes ' Elbow Connector だったら選択 Next End Sub
「Elbow Connectorだったら」ということで、If文で条件分岐。この時点ではまだ、「引数で受け取ったタイプと同じコネクタだったら」になっている。
Sub SelectConnecter(connector_type As Office.MsoConnectorType) Dim Shape As Shape For Each Shape In ActiveSheet.Shapes If Shape.ConnectorFormat.Type = connector_type Then ' Elbow Connector を選択 End If Next End Sub
選択する際は、直前に選択したコネクタの「選択状況を保持しつつ」、次のコネクタを選ぶ必要がある。方法は簡単で、Select の後ろに False を付せばよい。
Sub SelectConnecter(connector_type As Office.MsoConnectorType) Dim Shape As Shape For Each Shape In ActiveSheet.Shapes If Shape.ConnectorFormat.Type = connector_type Then Shape.Select False End If Next End Sub
試しに、Elbow Connector を指定して選択させてみる。
引数の型をOffice.MsoConnectorType にしてあるので、指定は直感的に行うことができる。
↓ こう書くと、さらに親切かもしれない。
Sub test() Call SelectConnecter(connector_type:=msoConnectorElbow) End Sub
結果、Elbow Connector だけ選択することが出来た。
ちなみにコネクタ以外のオートシェイプが混在する状態では、エラーが発生する。
この場合は、
「オートシェイプがコネクタの場合に限り」
という条件分岐で対応する。
Sub SelectConnecter(connector_type As Office.MsoConnectorType) Dim Shape As Shape For Each Shape In ActiveSheet.Shapes If Shape.Connector = msoTrue Then If Shape.ConnectorFormat.Type = connector_type Then Shape.Select False End If End If Next End Sub
検索された方が、既に無事解決していますように。
参考まで。