
いつもお世話になっております。
ある図形[名前:グループ1](イメージとテキストをグループ化したもの)と
ある図形[名前:グループ2](イメージとテキストをグループ化したもの)を
コネクター[名前:コネクター1]で接続しています。
(□―□ コンナカンジ・・・)
画面上のどちらかの図形をクリックした時に、
(1)クリックされた図形の名前を取得
(2)クリックされた図形に繋がっているコネクタの情報を取得、
(3)さらにそのコネクタの接続先の図形の名前を取得する
・・・というようなVBAのプログラムを組んでいるのですが・・・、
(1)(クリックされたオートシェイプの名前を取得)
Dim objShape As Shape
Dim ShapeName as string
Set objShape = ActiveSheet.Shapes(Application.Caller)
ShapeName = objShape.name
(2)(繋がっているコネクタの情報を取得)
※正確には画面上の全シェイプをチェックしコネクタなら配列に格納
For Each sh In ActiveSheet.Shapes
'コネクタ検索
If (sh.Connector = msoTrue) Then
Set con(i) = sh
i = i + 1
End If
Next
この後、
If strShapeName = con(i).ConnectorFormat.BeginConnectedShape.Name then・・・
If strShapeName = con(i).ConnectorFormat.EndConnectedShape.Name Then・・・
というチェックをし、Trueなら、選択した図形にくっついているコネクタなんだな・・・というチェックをしたいのですが、ここで質問です。
(1)の段階で選択された図形の名前は、"グループ1"。
しかし、(2)のcon(i).ConnectorFormat.BeginConnectedShape.Nameでコネクタと繋がっている同じ図形の名前は、VBA上では何故か"Freeform 1"という名前を取得してしまいます。
これでは永遠に一致する事はありません。
Excelのワークシート上の左上にある名前空間(?シェイプを選択すると名前が出てくるところ・・・)には"グループ1"と表示されます。
しかし、ここに"Freeform 1"と入れても同じ図形が選択されます。
同じ図形なのに何故二つの名前を持ってしまっているのでしょうか・・・?
そしてどうやったら、con(i).ConnectorFormat.BeginConnectedShape.Nameで、"グループ1"の名前を取得するのでしょうか??
どなたかご教授下さい。

No.1ベストアンサー
- 回答日時:
「グループ1」「グループ2」といった"名前"ですが、
自動的につけられた「既定の名前」なのでしょうか?
それとも、手動で変更した名前なのでしょうか?
「既定の名前」であれば「グループ 1」のように半角スペースが入るはずですし、
コネクタは「オートシェイプ 1」の形式になるはずなので、後者でしょうか?
どちらかによって状況が少し変わってくるのですが…。
----------------------------
>同じ図形なのに何故二つの名前を持ってしまっているのでしょうか・・・?
エクセル上に図形を作成すると、その図形には「既定の名前」がつきます。
「既定の名前」は図形の種類+連番の形式で作成されますが、
日本語表示と英語表示があって、例えば、
ワークシート上で「四角形 1」と表示される図形は、
VBA上では「Rectangle 1」となります。
ワークシート上あるいはVBA上で名前を変更すると、
そちらの名前が優先して表示されますが、
「既定の名前」がなくなったわけではなく、
引き続いて「既定の名前」で操作することができます。
変更された名前には日本語表示/英語表示といったものはありません。
----------------------------
>これでは永遠に一致する事はありません。
>どうやったら、con(i).ConnectorFormat.BeginConnectedShape.Nameで、
>"グループ1"の名前を取得するのでしょうか??
一致しないとしたら、たぶん別の理由からだと思われます。
VBA上では図形の名前は一貫して英語表示で取り扱われるので、
「英語表示」と「英語表示」(あるいは「変更された名前」と「変更された名前」)を
比較することになり、問題は生じません。
「グループ1」というのが変更された名前であれば、
VBA上でも「グループ1」という名前が返ってくるはずです。
一方、「グループ1」というのが既定の名前「グループ 1」であれば、
VBA上で返ってくる名前は「Group 1」のはずです。
おそらく、"グループ1"と"Freeform 1"は同じ図形を指してはいません。
前者は、
「イメージとテキストをグループ化したもの」="グループ 1"="Group 1"
を指しているのに対し、
後者は、
「グループ化された図形の、イメージの部分」単体="フリーフォーム 1"="Freeform 1"
を指しているのではないかと思います。
「グループ全体の名前」と「グループの部品の名前」を比較しているのが、
不一致の原因ということです。
"Freeform 1"という名前を返す図形について、
.ParentGroup.Nameで、その図形が属するグループの名前を取得して、
グループの名前どうしを比較するようにすれば解決するのではないかと思われます。
以上ご参考まで。長乱文陳謝。
deus_ex_machinaさん!!
本当に解り易く、ご丁寧にご説明頂きまして、本当に感謝致します!!
実際にはシェイプの名前は生成時に私が独自に命名したものになります。
私が命名した名前と、VBA上でコネクタに接続しているシェイプの名前が違うのではなく、名前は同じだけれども、コネクタが接続している"部品"が違っていたのですね!!
>「グループ化された図形の、イメージの部分」単体=
>"フリーフォーム 1"="Freeform 1"
>を指しているのではないかと思います。
この部分でピンときました!!
本当にありがとうございました!
感謝致します!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) Excelのvbaについて教えてください。 図形一つ一つに名前がついています。 指定した図形の名前を 2 2022/08/04 15:13
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
このQ&Aを見た人はこんなQ&Aも見ています
-
【EXCEL VBA】オートシェイプをクリックした時にそのオートシェイプの名前を取得したい
Visual Basic(VBA)
-
VBA 図形グループ化後オブジェクト名取得
PowerPoint(パワーポイント)
-
特定の名前のオートシェイプの有無を知りたい(エクセルVBA)
Excel(エクセル)
-
-
4
Excelのマクロでフリーフォームの作成について
Excel(エクセル)
-
5
Excelの任意セル上に図形がのっているかどうか?
Excel(エクセル)
-
6
VBA Shapes コピーと名前
Excel(エクセル)
-
7
エクセルVBAで図形のテキストを取得してセルに入力
Excel(エクセル)
-
8
VBA 同じ名前のオブジェクトを選択したいのですが
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PowerPointで台形を描く方法
-
pdf上に描画した図形が印刷され...
-
図形でしずく型を作りたい
-
線を組み合わせた図形の塗りつ...
-
エクセルVBAで図形のテキストを...
-
Illustratorで白い部分のみを透...
-
G.CREWの使い方
-
Jw-cad の図形リストが表示でき...
-
Illustratorでくくり括弧記号を...
-
ワードかエクセルの図形を使っ...
-
【Excel】図形の色をクリックす...
-
AutoCADで渦巻きを描く方法
-
JWWで登録した図形の縮尺を変え...
-
エクセル ユーザーフォームに...
-
錯視?素朴な質問です。
-
エクセルで図形を連動させたい
-
visioで図形を自由に回転したい
-
Excel2003図-扇形を書く方法は...
-
ワード 2003。表とテキストボッ...
-
Excel2007で、図形の一部(一辺...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PowerPointで台形を描く方法
-
pdf上に描画した図形が印刷され...
-
線を組み合わせた図形の塗りつ...
-
Excel のバージョンによって、...
-
ワードかエクセルの図形を使っ...
-
図形でしずく型を作りたい
-
エクセルVBAで図形のテキストを...
-
AutoCADで渦巻きを描く方法
-
Excel2003図-扇形を書く方法は...
-
クリックしたらパネルがめくれ...
-
Illustratorでくくり括弧記号を...
-
グーグルスプレッドシートの図...
-
エクセル ユーザーフォームに...
-
Jw-cad の図形リストが表示でき...
-
Excel 図形へのハイパーリンク
-
算数です 文章問題とか図形に出...
-
VBA 図形のテキスト取得
-
エクセルで図形を連動させたい
-
図形とビットマップの違いは?
-
WORDで図に網掛けする方法は?
おすすめ情報