[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シェイプへのテキスト入力』(みっと)
1個の図とテキストのシェイプが9個あり、これがグループ化されています。
グループが解除されている状態で、たまたまShapes("Rectangle 41") 41から9個なら このコードで文字が入ります。
・グループ化されていると.Select が良くないみたいですが、どうすれば良いかわかりません。 ・たまたま41からであり、この値を取得する方法がわかりません。
グループをクリックすると、この処理を実行したいのですが、可能でしょうか? 'オートシェイプテキスト編集 Sub os_tedit() Dim t_data(3, 3) As String Dim i As Integer Dim j As Integer Dim kk As Integer
t_data(1, 1) = "test1" t_data(1, 2) = "test2" t_data(1, 3) = "test3"
t_data(2, 1) = "test11" t_data(2, 2) = "test12" t_data(2, 3) = "test13"
t_data(3, 1) = "test21" t_data(3, 2) = "test22" t_data(3, 3) = "test23"
For i = 1 To 3 For j = 1 To 3
ActiveSheet.Shapes("Rectangle " & (41 + kk)).Select Selection.Characters.Text = t_data(i, j)
kk = kk + 1 Next j Next i End Sub
Sendkeysを使えば、グループ化解除しなくてもテキストの挿入が出来ますが(Excel2002で確認)、 グループ化解除-----テキスト設定-----再度グループ化という手順がよいと思いますが・・・・。
新規ブックにて、試してみてください。 標準モジュール(Module1)に
'================================================================================ Option Explicit Sub TextToShape() Dim shpnm As String Dim cshp As Shape Dim p_nm As String Dim m_num As Long Dim shp As Shape Dim g0 As Long Dim cnt As Long shpnm = Application.Caller Set shp = ActiveSheet.Shapes(shpnm).ParentGroup With shp m_num = 0 For Each cshp In .GroupItems If cshp.Type = msoAutoShape Then If cshp.AutoShapeType = msoShapeRectangle Then If m_num = 0 Then m_num = CLng(Replace(cshp.Name, "Rectangle", "")) Else m_num = Application.Min(m_num, CLng(Replace(cshp.Name, "Rectangle", ""))) End If Else p_nm = cshp.Name End If Else p_nm = cshp.Name End If Next End With cnt = shp.GroupItems.Count - 1 shp.Ungroup For g0 = 1 To cnt With ActiveSheet.Shapes("Rectangle " & m_num + g0 - 1) .TextFrame.Characters.Text = "test" & g0 End With Next ReDim nmarray(1 To cnt + 1) For g0 = 1 To cnt nmarray(g0) = "Rectangle " & m_num + g0 - 1 Next nmarray(cnt + 1) = p_nm ActiveSheet.Shapes.Range(nmarray()).Group End Sub
別の標準モジュール(Module2)にサンプルデータ作成コードとして、
'=========================================================================== Option Explicit Sub Mk_Sample() Dim g0 As Long Dim r As Range Dim nmarray(9) As Variant Set r = Range("b5:c10")
With ActiveSheet.Shapes.AddShape(msoShapeSmileyFace, r.Left, r.Top, r.Width, r.Height) nmarray(0) = .Name End With Set r = Range("d5:e5") For g0 = 0 To 8 Set r = Range("d5:e5").Offset(g0 \ 3, (g0 Mod 3) * 2) With ActiveSheet.Shapes.AddShape(msoShapeRectangle, r.Left, r.Top, r.Width, r.Height) nmarray(g0 + 1) = .Name End With Next With ActiveSheet.Shapes.Range(nmarray()).Group .OnAction = "TextToShape" End With ActiveCell.Activate End Sub
Mk_Sampleを実行してみてください。
アクティブシートに スマイルと9個の四角形(Rectangle)が作成され、これらがグループ化されたものが 作成されます。
作成されたグループ化された図形をクリックしてください。 四角形にTextToShape内で指定された文字列が設定されます。
グループ化している図形の条件は、
四角形は、Rectangle n(nは数字)という名前で作成され、nという数字は、連続していること。 四角形以外の図形が一つ含まれていること
です。作成したグループ化した図形に上述のTextToShapeを登録する。
Mk_Sampleは、この条件に合った図形の一例です。
Excel2002で動作確認しました。
ichinose
ichinoseさんありがとうございました。 すごいです。内容は難しいですが、マクロを登録するだけでそのまま動きました。 感謝致します。 (みっと)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.