Excel VBA質問箱 IV

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

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


10693 / 13644 ツリー ←次へ | 前へ→

【20383】オートシェイプに接続点を追加する pitakon 04/12/7(火) 19:38 質問[未読]
【20384】Re:オートシェイプに接続点を追加する IROC 04/12/7(火) 20:14 回答[未読]
【20391】Re:オートシェイプに接続点を追加する ichinose 04/12/8(水) 0:37 発言[未読]
【20393】Re:オートシェイプに接続点を追加する 訂正 ichinose 04/12/8(水) 8:20 発言[未読]

【20383】オートシェイプに接続点を追加する
質問  pitakon  - 04/12/7(火) 19:38 -

引用なし
パスワード
   オートシェイプの円に直線コネクタを接続すると、円の周囲の8点に接続されます。
円の周囲でなく円の中心に接続したいのですが、いい方法はないでしょうか?
円のプロパティを変えるとか、新規にオートシェイプを定義するとか、なにか方法がありそうですが・・・。
なお、わたくしの使用しているのはEXCEL97です。最新のバージョンで可能ならばその方法を教えてください。
よろしくお願いします。

【20384】Re:オートシェイプに接続点を追加する
回答  IROC  - 04/12/7(火) 20:14 -

引用なし
パスワード
   EXCEL2000ですが、円の中心に線を配置することは出来ても
接続点の追加はできないです。

【20391】Re:オートシェイプに接続点を追加する
発言  ichinose  - 04/12/8(水) 0:37 -

引用なし
パスワード
   pitakon さん、IROC さん、こんばんは。

>オートシェイプの円に直線コネクタを接続すると、円の周囲の8点に接続されます。
>円の周囲でなく円の中心に接続したいのですが、いい方法はないでしょうか?
>円のプロパティを変えるとか、新規にオートシェイプを定義するとか、なにか方法がありそうですが・・・。
>なお、わたくしの使用しているのはEXCEL97です。最新のバージョンで可能ならばその方法を教えてください。
>よろしくお願いします。
円とその中心を始点にした直線をグループ化してその直線にコネクターを接続する方法
です。
[#20349]と同じように二つの円を選択した状態で実行してみて下さい。

'=================================================================
Sub main()
  Dim x(1 To 2) As Single
  Dim y(1 To 2) As Single
  Dim ln(1 To 2) As Shape
  Dim con As Shape
  Dim shp As Shape
  Dim selshp As ShapeRange
  Set selshp = Selection.ShapeRange
  idx = 0
  For Each shp In selshp
   With shp
    x(idx + 1) = .Left + .Width / 2
    y(idx + 1) = .Top + .Height / 2
    With ActiveSheet
     Set ln(idx + 1) = .Shapes.AddLine(x(idx + 1), y(idx + 1), x(idx + 1), shp.Top)
     Set newshp = .Shapes.Range(Array(shp.Name, ln(idx + 1).Name)).Group
     End With
    idx = idx + 1
    End With
   Next
  Set con = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, x(1), y(1), x(2), y(2))
  With con.ConnectorFormat
    .BeginConnect ln(1), 1
    .EndConnect ln(2), 1
    End With
  For idx = 1 To 2
    ln(idx).Visible = msoFalse
    Next
  Erase x(), y(), ln()
End Sub

【20393】Re:オートシェイプに接続点を追加する 訂...
発言  ichinose  - 04/12/8(水) 8:20 -

引用なし
パスワード
   おはようございます。
一箇所訂正です。

>pitakon さん、IROC さん、こんばんは。
>
>>オートシェイプの円に直線コネクタを接続すると、円の周囲の8点に接続されます。
>>円の周囲でなく円の中心に接続したいのですが、いい方法はないでしょうか?
>>円のプロパティを変えるとか、新規にオートシェイプを定義するとか、なにか方法がありそうですが・・・。
>>なお、わたくしの使用しているのはEXCEL97です。最新のバージョンで可能ならばその方法を教えてください。
>>よろしくお願いします。
>円とその中心を始点にした直線をグループ化してその直線にコネクターを接続する方法
>です。
>[#20349]と同じように二つの円を選択した状態で実行してみて下さい。
>
>'=================================================================
>Sub main()
>  Dim x(1 To 2) As Single
>  Dim y(1 To 2) As Single
>  Dim ln(1 To 2) As Shape
>  Dim con As Shape
>  Dim shp As Shape
>  Dim selshp As ShapeRange
>  Set selshp = Selection.ShapeRange
>  idx = 0
>  For Each shp In selshp
>   With shp
>    x(idx + 1) = .Left + .Width / 2
>    y(idx + 1) = .Top + .Height / 2
>    With ActiveSheet
>     Set ln(idx + 1) = .Shapes.AddLine(x(idx + 1), y(idx + 1), x(idx + 1), shp.Top)
>     Set newshp = .Shapes.Range(Array(shp.Name, ln(idx + 1).Name)).Group
>     End With
>    idx = idx + 1
>    End With
>   Next
'  Set con = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, x(1), y(1), x(2), y(2))
   Set con = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, x(1), y(1), x(2) - x(1), y(2) - y(1))
'↑にして下さい
>  With con.ConnectorFormat
>    .BeginConnect ln(1), 1
>    .EndConnect ln(2), 1
>    End With
>  For idx = 1 To 2
>    ln(idx).Visible = msoFalse
>    Next
>  Erase x(), y(), ln()
>End Sub

訂正しなくても動作はしますが、AddConnectorメソッドの動作がHELPと
違うみたいなので・・・。

Helpには、コネクタの新規の作成は、始点と終点の位置をポイント単位指定と
記述されていますが、そのとおりに指定すると意図した位置に作成されませんでした。
色々と試してみると始点からの相対位置のような気がします。
訂正コードだと意図した位置に作成されます。

HELPの間違いか?、仕様の間違いか?、それとも私の解釈の間違いか??

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