Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4956 / 13646 ツリー ←次へ | 前へ→

【53400】コネクタがついている図形の位置の取得 GOOD 08/1/9(水) 10:41 質問[未読]
【53401】Re:コネクタがついている図形の位置の取得 ハチ 08/1/9(水) 12:54 発言[未読]
【53402】Re:コネクタがついている図形の位置の取得 GOOD 08/1/9(水) 13:04 発言[未読]
【53403】Re:コネクタがついている図形の位置の取得 ハチ 08/1/9(水) 13:22 発言[未読]
【53404】Re:コネクタがついている図形の位置の取得 GOOD 08/1/9(水) 13:43 質問[未読]
【53409】Re:コネクタがついている図形の位置の取得 ハチ 08/1/9(水) 15:36 回答[未読]
【53411】Re:コネクタがついている図形の位置の取得 GOOD 08/1/9(水) 16:07 お礼[未読]
【53415】Re:コネクタがついている図形の位置の取得 ハチ 08/1/9(水) 16:37 発言[未読]
【53418】Re:コネクタがついている図形の位置の取得 GOOD 08/1/9(水) 19:03 回答[未読]

【53400】コネクタがついている図形の位置の取得
質問  GOOD E-MAIL  - 08/1/9(水) 10:41 -

引用なし
パスワード
   お借りいたします。

図形の位置、コネクタの操作は、過去の質問等である程度理解を
致しましたが、コネクタがつながっている図形の位置をランダムに
取得することはできるのでしょうか?

申し訳ないのですが、どうしてもわからないのでわかる方がいらっしゃったら
教えていただけないでしょうか。

よろしくお願い致します。

【53401】Re:コネクタがついている図形の位置の取得
発言  ハチ  - 08/1/9(水) 12:54 -

引用なし
パスワード
   ▼GOOD さん:
>お借りいたします。
>
>図形の位置、コネクタの操作は、過去の質問等である程度理解を
>致しましたが、コネクタがつながっている図形の位置をランダムに
>取得することはできるのでしょうか?

まずは、どのあたりがわからないのか? 明確にしてください。

コネクタが接続されている図形を取得できない とか、
ランダムに選択する方法 とか

案としては・・・
1、コネクタがつながっている図形をCollectionにする
2、Rnd * Collection.countを整数化してランダムな値をとる
3、Set obj = Items(値) セットして、必要なプロパティを参照

といった感じではどうでしょうか?

【53402】Re:コネクタがついている図形の位置の取得
発言  GOOD E-MAIL  - 08/1/9(水) 13:04 -

引用なし
パスワード
   ハチさん
返信ありがとうございます。

やりたいことのイメージとしては、

1.画面上の任意の図形を選択
2.その図形にコネクタが接続されているかを確認
3.接続されている場合、接続されているもう一方の図形の位置を取得

上記のような感じです。
ゴールとしては、3番が出来ればよいと考えています。
1番はすでに完成しているのですが、2、3番のプロセスが
どうしてもわかりません。

何か情報がございましたら、教えていただけないでしょうか。
よろしくお願い致します。


▼ハチ さん:
>▼GOOD さん:
>>お借りいたします。
>>
>>図形の位置、コネクタの操作は、過去の質問等である程度理解を
>>致しましたが、コネクタがつながっている図形の位置をランダムに
>>取得することはできるのでしょうか?
>
>まずは、どのあたりがわからないのか? 明確にしてください。
>
>コネクタが接続されている図形を取得できない とか、
>ランダムに選択する方法 とか
>
>案としては・・・
>1、コネクタがつながっている図形をCollectionにする
>2、Rnd * Collection.countを整数化してランダムな値をとる
>3、Set obj = Items(値) セットして、必要なプロパティを参照
>
>といった感じではどうでしょうか?

【53403】Re:コネクタがついている図形の位置の取得
発言  ハチ  - 08/1/9(水) 13:22 -

引用なし
パスワード
   ▼GOOD さん:

ちょっとイメージしていた内容とは違いました。
コネクタが接続されているシェイプをランダムに選択するのかと思ってました。

>やりたいことのイメージとしては、
>
>1.画面上の任意の図形を選択
>2.その図形にコネクタが接続されているかを確認
>3.接続されている場合、接続されているもう一方の図形の位置を取得

2.ですがShapeにコネクタが接続されているか、
判定するプロパティを自分は知りません。
ですので・・・・

1、Shapeすべてをループ
2、.Connectorでコネクタか判定
3、コネクタであれば、BeginかEndのShapeが該当のShapeか判定
4、該当のPhapeであれば、反対側のShapeを取得

ですかね?

【53404】Re:コネクタがついている図形の位置の取得
質問  GOOD E-MAIL  - 08/1/9(水) 13:43 -

引用なし
パスワード
   ハチさん

返信ありがとうございます。

>1、Shapeすべてをループ
>2、.Connectorでコネクタか判定
>3、コネクタであれば、BeginかEndのShapeが該当のShapeか判定
>4、該当のPhapeであれば、反対側のShapeを取得

上記の3番の「コネクタであれば、BeginかEndのShapeが該当のShapeか判定」
というのが、どうしてもわかりません。

どのように判断をすればよいのでしょうか?
恐らくそれが出来れば、4番も自然に出来ると思います。

初心者で大変申し訳ございませんが、よろしくお願い致します。


▼ハチ さん:
>▼GOOD さん:
>
>ちょっとイメージしていた内容とは違いました。
>コネクタが接続されているシェイプをランダムに選択するのかと思ってました。
>
>>やりたいことのイメージとしては、
>>
>>1.画面上の任意の図形を選択
>>2.その図形にコネクタが接続されているかを確認
>>3.接続されている場合、接続されているもう一方の図形の位置を取得
>
>2.ですがShapeにコネクタが接続されているか、
>判定するプロパティを自分は知りません。
>ですので・・・・
>
>1、Shapeすべてをループ
>2、.Connectorでコネクタか判定
>3、コネクタであれば、BeginかEndのShapeが該当のShapeか判定
>4、該当のPhapeであれば、反対側のShapeを取得
>
>ですかね?

【53409】Re:コネクタがついている図形の位置の取得
回答  ハチ  - 08/1/9(水) 15:36 -

引用なし
パスワード
   ▼GOOD さん:

>上記の3番の「コネクタであれば、BeginかEndのShapeが該当のShapeか判定」
>というのが、どうしてもわかりません。
>
>どのように判断をすればよいのでしょうか?
>恐らくそれが出来れば、4番も自然に出来ると思います。

ちょっと長いですが、
.Connector.ConnectorFormat.BeginConnectedShape がBeginのオブジェクトになります。

コネクタの付いている図形をひとつ、選択した状態で実行してみてください。

Sub Test_Connector()
  Dim Tgt_Shp As Object
  Dim obj_Shp As Shape
  
  Set Tgt_Shp = Selection
  
  For Each obj_Shp In ActiveSheet.Shapes
    With obj_Shp
      If .Connector Then 'コネクタか?
        With .ConnectorFormat
          If .BeginConnected And .EndConnected Then
            If Tgt_Shp.Name = .BeginConnectedShape.Name Then  'Beginが対象か?
              Debug.Print .EndConnectedShape.Name
            ElseIf Tgt_Shp.Name = .EndConnectedShape.Name Then 'Endが対象か?
              Debug.Print .BeginConnectedShape.Name
            End If
          End If
        End With
      End If
    End With
  Next
  
  Set Tgt_Shp = Nothing
End Sub

【53411】Re:コネクタがついている図形の位置の取得
お礼  GOOD E-MAIL  - 08/1/9(水) 16:07 -

引用なし
パスワード
   ハチさん

返信ありがとうございます。
とてもわかりやすいソースですね!
一目で内容がある程度理解できました。

しかし、

>Sub Test_Connector()
>  Dim Tgt_Shp As Object
>  Dim obj_Shp As Shape
>  
>  Set Tgt_Shp = Selection
>  
>  For Each obj_Shp In ActiveSheet.Shapes
>    With obj_Shp
>      If .Connector Then 'コネクタか?
>        With .ConnectorFormat
>          If .BeginConnected And .EndConnected Then
>            If Tgt_Shp.Name = .BeginConnectedShape.Name Then

→ここでエラーが出てしまいます・・・
おそらく原因はTgt_Shp.Nameの値がないことが原因であると思います。
エラーは、「アプリケーション定義、またはオブジェクト定義のエラーです」
となりました。
年のため、

>  Set Tgt_Shp = Selection

の後に、Msgbox tgt_shp.Name
と記述してみたところ、やはりここで同様にエラーが出てしまいます。

【53415】Re:コネクタがついている図形の位置の取得
発言  ハチ  - 08/1/9(水) 16:37 -

引用なし
パスワード
   ▼GOOD さん:

>→ここでエラーが出てしまいます・・・
>おそらく原因はTgt_Shp.Nameの値がないことが原因であると思います。
>エラーは、「アプリケーション定義、またはオブジェクト定義のエラーです」
>となりました。
>年のため、
>
>>  Set Tgt_Shp = Selection
>
>の後に、Msgbox tgt_shp.Name
>と記述してみたところ、やはりここで同様にエラーが出てしまいます。

さきほどのレスに
「コネクタの付いている図形をひとつ、選択した状態で実行してみてください。」と
していたのですが、

1つの図形を選択した状態で実行してもダメですか?

SelectionがShapeか判定してからSetするように
例外処理を入れたほうが良いのですが、
やり方を忘れました・・・

こちらでは正常にDebug.Printまで出来ました。(Win2k,Excel2k)

【53418】Re:コネクタがついている図形の位置の取得
回答  GOOD E-MAIL  - 08/1/9(水) 19:03 -

引用なし
パスワード
   ハチさん

返信ありがとうございます。

そしてできました!!!
なぜ出来たかはわからないのですが、頂いたコードをそのままやったら
できました。
恐らく自分のソースに載せようとした為だと思われます。。

ありがとうございます。
本当に助かりました。

▼ハチ さん:
>▼GOOD さん:
>
>>→ここでエラーが出てしまいます・・・
>>おそらく原因はTgt_Shp.Nameの値がないことが原因であると思います。
>>エラーは、「アプリケーション定義、またはオブジェクト定義のエラーです」
>>となりました。
>>年のため、
>>
>>>  Set Tgt_Shp = Selection
>>
>>の後に、Msgbox tgt_shp.Name
>>と記述してみたところ、やはりここで同様にエラーが出てしまいます。
>
>さきほどのレスに
>「コネクタの付いている図形をひとつ、選択した状態で実行してみてください。」と
>していたのですが、
>
>1つの図形を選択した状態で実行してもダメですか?
>
>SelectionがShapeか判定してからSetするように
>例外処理を入れたほうが良いのですが、
>やり方を忘れました・・・
>
>こちらでは正常にDebug.Printまで出来ました。(Win2k,Excel2k)

4956 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free