Excel VBA質問箱 IV

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

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


41079 / 76735 ←次へ | 前へ→

【40740】Re:吹出しの先っぽの位置を変えずに自動サイズ調整してほしい
回答  bykin  - 06/7/21(金) 23:36 -

引用なし
パスワード
   こんばんわ。

>私としてはひとつは複数の吹出しの整理について
>こちらでは吹出しのテキストボックスの自動生成時の文字編集状態について
>と吹出しの自動サイズ調整時について
>と別の質問と考えていました。

あー、そーいうことでっか。
あんまりご質問が似てたもんで・・・失礼しました。

で、このご質問の件でっけど、

>吹出しがセレクトされたときに2)をするようにすればうまくいくかと

Shapeを操作したときに起動するイベントはないから
やっぱり手作業でマクロを実行させることになるんとちゃうかな?

↓お二人のアイデア拝借して・・・こんな感じ?

Public Sub SetInitialValue()
  Dim s As Shape
  Dim cx As Single
  Dim cy As Single
  
  On Error Resume Next
  For Each s In ActiveSheet.Shapes
    With s
      Select Case .AutoShapeType
        Case msoShapeRectangularCallout To msoShapeLineCallout4BorderandAccentBar
          cx = .Adjustments(1) * .Width + .Left
          cy = .Adjustments(2) * .Height + .Top
          .AlternativeText = cx & "," & cy
          .TextFrame.AutoSize = True
      End Select
    End With
  Next
End Sub

Public Sub SetAllCallout()
  Dim s As Shape
  
  For Each s In ActiveSheet.Shapes
    SetCallout s
  Next
End Sub

Sub SetSelectedCallout()
  Dim s As Object
  
  On Error Resume Next
  Set s = Selection.ShapeRange
  If Err.Number = 0 Then
    SetCallout s
  End If
  Set s = Nothing
End Sub

Private Sub SetCallout(ByRef s As Object)
  Dim cx As Single
  Dim cy As Single
  
  With s
    Select Case .AutoShapeType
      Case msoShapeRectangularCallout To msoShapeLineCallout4BorderandAccentBar
        If .AlternativeText Like "*,*" Then
          cx = CSng(Left$(.AlternativeText, InStr(.AlternativeText, ",") - 1))
          cy = CSng(Mid$(.AlternativeText, InStr(.AlternativeText, ",") + 1))
          .Adjustments(1) = (cx - .Left) / .Width
          .Adjustments(2) = (cy - .Top) / .Height
        End If
    End Select
  End With
End Sub

(使い方)
1.任意の個数の吹き出しをシート上に適当に配置して先端位置を決定し、
  適当な文字列を入力する。
2.SetInitialValueを実行する。
  →自動調整を設定し、先端位置をAlternativeTextに記憶。
3.吹き出しの文字列を変更する。→先端の位置が変化する。
4.特定の吹き出しの先端位置を元に戻す場合は、当該吹き出しを選択してから
  SetSelectedCalloutを実行する。
5.全部の吹き出しを一括修正する場合はSetAllCalloutを実行する。

DPIは考慮したほうがええんやろうけど、これくらいやったらこのままでもええと思います。
試してみてな。
ほな。
0 hits

【40680】吹出しの先っぽの位置を変えずに自動サイズ調整してほしい あくたいおん 06/7/20(木) 13:01 質問
【40708】Re:吹出しの先っぽの位置を変えずに自動サ... ichinose 06/7/20(木) 20:16 発言
【40709】Re:吹出しの先っぽの位置を変えずに自動サ... bykin 06/7/20(木) 21:13 発言
【40731】Re:吹出しの先っぽの位置を変えずに自動サ... あくたいおん 06/7/21(金) 16:22 発言
【40727】Re:吹出しの先っぽの位置を変えずに自動サ... あくたいおん 06/7/21(金) 15:43 発言
【40734】Re:吹出しの先っぽの位置を変えずに自動サ... ichinose 06/7/21(金) 17:31 発言
【40740】Re:吹出しの先っぽの位置を変えずに自動サ... bykin 06/7/21(金) 23:36 回答
【40934】Re:吹出しの先っぽの位置を変えずに自動サ... あくたいおん 06/7/26(水) 15:35 質問
【40938】Re:吹出しの先っぽの位置を変えずに自動サ... ichinose 06/7/26(水) 16:11 発言
【40989】Re:吹出しの先っぽの位置を変えずに自動サ... あくたいおん 06/7/27(木) 13:20 質問
【41019】Re:吹出しの先っぽの位置を変えずに自動サ... ichinose 06/7/27(木) 19:48 発言
【41026】Re:吹出しの先っぽの位置を変えずに自動サ... bykin 06/7/27(木) 22:11 発言

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