Excel VBA質問箱 IV

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

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


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

【55249】マクロでグループ化した図を貼り付け、コネクタ接続を行いたい すず 08/4/24(木) 12:22 質問[未読]
【55253】Re:マクロでグループ化した図を貼り付け、... n 08/4/24(木) 15:56 発言[未読]
【55263】Re:マクロでグループ化した図を貼り付け、... すず 08/4/25(金) 10:10 お礼[未読]
【55266】Re:マクロでグループ化した図を貼り付け、... ハチ 08/4/25(金) 10:41 発言[未読]
【55268】Re:マクロでグループ化した図を貼り付け、... n 08/4/25(金) 11:07 発言[未読]
【55269】Re:マクロでグループ化した図を貼り付け、... n 08/4/25(金) 11:15 発言[未読]
【55587】Re:マクロでグループ化した図を貼り付け、... すず 08/5/12(月) 13:37 お礼[未読]

【55249】マクロでグループ化した図を貼り付け、コ...
質問  すず  - 08/4/24(木) 12:22 -

引用なし
パスワード
   初めて投稿させて頂きます

色々調べてもエラーの解消が出来ません
教えてください
よろしくお願いします

<やりたい事>
1.基本となる図の雛形を作成し、雛形用シートにおいておく
  ※テキスト・図をグループ化しています
          ~~~~~~~~~~
2.マクロで
  ・1.の図を2つ、COPY→PASTEを行う
  ・上記の図をコネクタで接続する

<エラー現象>
コネクタ接続時、
 「BeginConnect・EndConnect」で追加した図を指定するが
 エラーとなる
 ◎エラーメッセージ
  実行時エラー'-2147024809(80070057)'
  指定された値は境界を越えています

雛形の図が「グループ化」されていなければ、上手く実行されます
「グループ化」している図をコネクタ接続する事は出来ないのでしょうか?

教えてください
よろしくお願いします

<ソース>
  Dim sNm As String
  Dim sNm2 As String
  
  Sheets("シェイプ").Select
  ActiveSheet.Shapes("shapeJS").Select
  Selection.Copy
  Sheets("Sheet1").Select
  Range("F17").Select
  ActiveSheet.Paste
  
  Selection.Name = "no1"
  sNm = Selection.Name
  
  Sheets("シェイプ").Select
  Selection.Copy
  Sheets("Sheet1").Select
  Range("J19").Select
  ActiveSheet.Paste
  
  Selection.Name = "no2"
  sNm2 = Selection.Name
  
  ActiveSheet.Shapes.AddConnector(msoConnectorElbow, 411#, 262.5, 12
9#, _
    32.25).Select
  Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle
  Selection.ShapeRange.Flip msoFlipHorizontal
  Selection.ShapeRange.Flip msoFlipVertical
  Selection.ShapeRange.ConnectorFormat.BeginConnect ActiveSheet.Shap
es(sNm), 4
  Selection.ShapeRange.ConnectorFormat.EndConnect ActiveSheet.Shapes
(sNm2), 2

【55253】Re:マクロでグループ化した図を貼り付け...
発言  n  - 08/4/24(木) 15:56 -

引用なし
パスワード
   こんにちは。
>「グループ化」している図をコネクタ接続する事は出来ないのでしょうか?
手作業で試してみてください。
GroupObjectのShapeRangeはConnectionSiteCountが0ですから、直接は接続できません。
GroupItemsのItem(要は、その構成Shape)に対しては接続できます。

グループ解除/再グループの必要がなく、1つのShapeとして処理しても構わないのであれば、
CopyPictureメソッドを使って『図』としてコピーすれば、接続できます。

【55263】Re:マクロでグループ化した図を貼り付け...
お礼  すず  - 08/4/25(金) 10:10 -

引用なし
パスワード
   TO n さん

回答ありがとうございます。

やはりグループ化された状態ではムリですか・・・
手作業で接続時は、
グループ化されていても、グループ化されていないかのように接続が出来ます。
しかし、マクロではムリのようです。

「グループ化解除→コネクタ接続→グループ化」
という手順を踏まなくても、コネクタ接続出来たら・・・
と思ったのですが、手順を踏む事にします。

ありがとうございました。

【55266】Re:マクロでグループ化した図を貼り付け...
発言  ハチ  - 08/4/25(金) 10:41 -

引用なし
パスワード
   ▼すず さん:
>TO n さん
>
>回答ありがとうございます。
>
>やはりグループ化された状態ではムリですか・・・

回答は、よく読んだほうが良いですよ。

グループには、接続できませんが、
グループの中にある要素(シェイプ)には接続できると書かれています。

質問の内容から察するに、できると思います。(試してませんけど)

【55268】Re:マクロでグループ化した図を貼り付け...
発言  n  - 08/4/25(金) 11:07 -

引用なし
パスワード
   『直接は接続できません。』の意味は、
GroupObjectそのものに対して接続はできません。
GroupObjectの中味の各Shapeには接続できます。
の意味です。

貴方のコードの
>ActiveSheet.Shapes(sNm)
は単独のShapeだったり、GroupObjectだったりするわけですから、
GroupObjectの場合は、その中のShapeに対して接続するように
条件分岐しないといけませんね。

Sub try()
  Dim s1 As Shape
  Dim s2 As Shape

  Sheets("シェイプ").Shapes("shapeJS").Copy
  With Sheets("Sheet1")
    .Paste
    Set s1 = .Shapes(.Shapes.Count)
    Set s2 = s1.Duplicate
    With .Range("F17")
      s1.Left = .Left
      s1.Top = .Top
    End With
    With .Range("J19")
      s2.Left = .Left
      s2.Top = .Top
    End With

    If TypeName(s1.DrawingObject) = "GroupObject" Then
      Set s1 = s1.GroupItems(1)
    End If
    If TypeName(s2.DrawingObject) = "GroupObject" Then
      Set s2 = s2.GroupItems(1)
    End If
    With .Shapes.AddConnector( _
           msoConnectorElbow, 411, 262.5, 129, 32.25)
      .Line.EndArrowheadStyle = msoArrowheadTriangle
      .Flip msoFlipHorizontal
      .Flip msoFlipVertical
      .ConnectorFormat.BeginConnect s1, 4
      .ConnectorFormat.EndConnect s2, 2
    End With
  End With

  Set s1 = Nothing
  Set s2 = Nothing
End Sub

【55269】Re:マクロでグループ化した図を貼り付け...
発言  n  - 08/4/25(金) 11:15 -

引用なし
パスワード
   >If TypeName(s1.DrawingObject) = "GroupObject" Then
>  Set s1 = s1.GroupItems(1)
>End If
>If TypeName(s2.DrawingObject) = "GroupObject" Then
>  Set s2 = s2.GroupItems(1)
>End If

 ▼

If TypeName(s1.DrawingObject) = "GroupObject" Then
  Set s1 = s1.GroupItems(1)
  Set s2 = s2.GroupItems(1)
End If

【55587】Re:マクロでグループ化した図を貼り付け...
お礼  すず  - 08/5/12(月) 13:37 -

引用なし
パスワード
   返信を頂いている事に気付かず、申し訳ありませんでした。

グループ化を解除しないと、コネクタ接続が出来ないと
解釈してしまっていました。
丁寧な説明、ありがとうございました。

グループ化している状態で、選択出来るのですね・・・
これでコードがシンプルになります。

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

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