[[20231221100601]] 『吹き出しに表示させる文字列』(三ツ矢) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『吹き出しに表示させる文字列』(三ツ矢)

下記のVBAコードは、text_contentsをRange("A1")で吹き出しはA1の文字列が表示されますが
希望は、吹き出しと表示される文字列は別の指定文字列に変更したい。
マクロコードをどのように変更したら良いですか。

例えば、A1「ここから」で吹き出しに「予定: 2m先」のような感じに

'吹き出し表示 ----------

    Dim text_contents As String
    text_contents = Range("A1")
    ActiveSheet.Shapes.AddShape(msoShapeRectangularCallout, 50, 50, 10, 10).Select
    With Selection
        'テキスト入力
        .Text = text_contents
        '太文字に変更
        .Font.Bold = True
        '文字サイズ変更
        .Font.Size = 15
        '文字の色変更
        .Font.Color = RGB(255, 0, 0)
        'テキストボックスの大きさ調整(自動)
        .AutoSize = True
        '外枠の色変更
        .ShapeRange.Line.Visible = msoTrue
        .ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
        '背景色の変更
        .ShapeRange.Fill.ForeColor.RGB = RGB(255, 255, 255)
        '吹き出しの位置調整
        '吹き出しからの右方向距離
        .ShapeRange.Adjustments.Item(1) = -0.3
        '吹き出しからの下方向距離
        .ShapeRange.Adjustments.Item(2) = -1.4
    End With
’-----------------------------------------------------------------------

< 使用 Excel:Excel2021、使用 OS:Windows11 >


 それはA1セルを参照しないでって意味でしょうか?

 なら...↓これは必要ないので削除して

 Dim text_contents As String
 text_contents = Range("A1")

 ↓これでよいのかな?

 .Text = text_contents 変更 → .Text = "予定:2m先"

 別のマクロからって話なら...ActiveSheet.Shapes から
 この図形を探さないといけないけど...
(あみな) 2023/12/21(木) 10:44:07

アドバイスを受けて以下のように変更すると"B1"の右下に吹き出しが出ています。
"C1"をターゲットにしたいのですが位置を設定するようなコードを追加できますか ?

      '吹き出し表示

      ActiveSheet.Shapes.AddShape(msoShapeRectangularCallout, 50, 50, 10, 10).Select
      With Selection

            'テキスト入力
            If ListType = "1" Then
                  .Text = "予定:2m先"
            Else
                  .Text = "予定1m先"
            End If

            '太文字に変更
            .Font.Bold = True

            '文字サイズ変更
            .Font.Size = 15
(三ツ矢) 2023/12/21(木) 11:25:37

説明不足でした。

"C1"セルが原点(0,0)からどれぐらいの位置にあるのかをチェックする必要があるので
適当に50,50,10,10を変更しながら希望の位置を見つけるしかないですか ?
(三ツ矢) 2023/12/21(木) 11:40:37


 (三ツ矢) 2023/12/21(木) 11:25:37 に対して

 >アドバイスを受けて以下のように変更すると"B1"の右下に吹き出しが出ています。

 最初のマクロから...B1セル右下にに表示されていると思いますが...
 私は、移動させてませんよ。

 >(三ツ矢) 2023/12/21(木) 11:40:37 に対して

 追加で質問するのも良いですが、されたい事はそれで全てですか?

 *図形は1コでこれ以上増えないですか?
 *セルに表示したい位置にセルの高さと幅で図形の大きさを確定して
   確か...F2:G5 みたいに表示ができたような気がしました。
  もしくはG5セルとか...( 1セルだとセルが大きくなりますが )

 *原点(0,0)から探すって言うより、どこのセルに表示させたいか
  のが話が早いと思うのですが...

 ちょっと...ご飯行きますので後で
(あみな) 2023/12/21(木) 12:09:09

表示は、使用者にどんな状況かを確認させる意味で
1度表示後にすぐに削除するような使い方をしますので
図形が増えることはありません。

msgboxの表示は、小さすぎて確認には向いていないように思えたので
吹き出し表示を考えました。

50,50,10,10 のような実際やってみないと判らないような単位では無く
位置が見た目で選べるならどこのセルに表示させるかは希望にそう提案です。。

やりたいことは、以上で全てです。
追加質問は、ありません。

(三ツ矢) 2023/12/21(木) 12:26:55


 下記のようなイメージです

 With Range("E2:F4")
   ActiveSheet.Shapes.AddShape(Type:=msoShapeRectangularCallout, _
   Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Select
   Selection.Text = "表示文字"
 End With

 後は、自由に加工してください
(あみな) 2023/12/21(木) 12:58:36

コードを修正。
上手く吹き出し(オートシェイプ)がセルに表示されました。

但し、オートシェイプには、
MsgBoxが出た時点で作画途中のような図形の回転マークや四角の四隅や真ん中に〇印がでます。

これは消せないのでしょうか

      With ws1.Range("F3:F3")
            ws1.Shapes.AddShape(msoShapeRectangle, _
                  Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Select
            With Selection

                  'テキスト入力
                  If ListType = "Join" Then
                        .Text = "集計型"
                  Else
                        .Text = "単独型"
                  End If

                  '太文字に変更
                  .Font.Bold = True

                  '文字サイズ変更
                  .Font.Size = 20

                  '文字の色変更
                  .Font.Color = RGB(255, 0, 0)

                  'テキストボックスの大きさ調整(自動)
                  .AutoSize = True

                  '外枠の色変更
                  .ShapeRange.Line.Visible = msoTrue
                  .ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)

                  '背景色の変更
                  .ShapeRange.Fill.ForeColor.RGB = RGB(255, 255, 255)

            End With
      End With

      '-----------------------------------------------------------------------

      Dim rc As VbMsgBoxResult
      rc = MsgBox("A列に処理リストで問題ないか確認してください。!! " & vbCrLf & _
            "処理を実行しますか ?", vbYesNo + vbQuestion, "Make_Form_List")
      If rc = vbNo Then
            MsgBox "処理を中止します。"

            'シート内の図形を全選択
            ActiveSheet.Shapes.SelectAll
            '選択した図形を削除
            Selection.ShapeRange.Delete

            End Sub
      End If

      'シート内の図形を全選択
      ActiveSheet.Shapes.SelectAll
      '選択した図形を削除
      Selection.ShapeRange.Delete

(三ツ矢) 2023/12/21(木) 13:53:53


自分で試行錯誤していたら
 シート上で手動でセルを適当にクリックしたら作画中が終了して
 図形の回転マークや四角の四隅や真ん中の〇印が消えて完成形となりました。

そこで以下のように「ws1.Range("I1").Select」を行うと
 同じように完成形が出来たので現在はこれで満足しています。

なぜ、このようにしないと作画途中のような状態になるのでしょうか?
又、現在に処理('Dumykey_In ------)で十分と言えるのでしょうか ?

                  '背景色の変更
                  .ShapeRange.Fill.ForeColor.RGB = RGB(255, 255, 255)

            End With
      End With

      'Dumykey_In ------> 追加
            ws1.Range("I1").Select

      '-----------------------------------------------------------------------

      Dim rc As VbMsgBoxResult

(三ツ矢) 2023/12/22(金) 08:31:59


たぶんその「作画中」って言ってるのは図形が選択されてる状態のことかな?

そもそもAddShape(~).Selectで図形を追加して選択するって命令文で、
With Selection ~ End With で、選択された図形に対して処理をしてるんだよね

選択を解除したいならその処理を入れないといけないんだけど、
『選択を解除する』っていう命令は無いから、適当なセル(A1とか)を選択する処理を入れるのが無難

って認識なんだけど合ってるかな...ちょっと自信ない...
(む) 2023/12/22(金) 08:54:40


(む)さん、ありがとうございます。

選択を解除する命令が必要だったのですね。

アドバイスを受けてググって以下のURLを見つけました。
https://club-vba.tokyo/vba-select-shape/

私の言っていた「作画中」とはまさに、URL中の
”SelectAllを使って図形を全選択した状態”の図のような状態でした。

『選択を解除する』っていう命令は無いとの事で
適当なセルを選択する処理を追加した事は的を得た選択だったようです。

これですっきりしました。

(三ツ矢) 2023/12/22(金) 09:17:55


 最初からSelectしないコードにするとこんな風

    Sub sample()
      Dim ws As Worksheet, c As Range
      Set ws = Worksheets(1)
      Set c = ws.Range("F3")
      With ws.Shapes.AddShape(msoShapeRectangle, c.Left, c.Top, c.Width, c.Height)
          With .TextFrame2
             With .TextRange
                .Text = "テキスト"
                With .Font
                   .Size = 20
                   .Bold = msoTrue
                   .Fill.ForeColor.RGB = RGB(255, 0, 0)
                End With
             End With
             .WordWrap = msoFalse
             .AutoSize = msoAutoSizeShapeToFitText
          End With
          .Line.Visible = msoTrue
          .Line.ForeColor.RGB = RGB(0, 0, 0)
          .Fill.ForeColor.RGB = RGB(255, 255, 255)
      End With
    End Sub
(´・ω・`) 2023/12/22(金) 11:25:30

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.