|
▼あき さん:
こんばんは。
>以下のようなマクロで、
>オートシェイプ内にテキストを入力しようとしているのですが、
>どうしてもブランクになってしまします。
>
>Intext(String型)の文字数を減らすとうまくいくのですが、
>文字数が一定以上になるとブランクになります。
>
>理由がまったくわかりません。
>回避方法等あれば教えて頂きたいと思います。。
>
> ActiveSheet.Shapes.AddShape(msoShapeRectangle, 154.5, 155.25, 300.25, 1000.25).Select
> Selection.Characters.Text = Intext
普通に↑Textプロパティを使用すると、255を超えると駄目みたいですねえ!!
こんな風にすると表示できます。
'==========================================================
Sub test()
Dim aaa As Shape
Set aaa = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 154.5, 155.25, 300.25, 1000.25)
aaa.TextFrame.Characters.Text = ""
With aaa.TextFrame
.Characters(1, 30).Text = String(30, "a")
For idx = 2 To 20
.Characters(31 * (idx - 1), 31).Insert vbLf & String(30, "a")
Next
MsgBox .Characters.Text
MsgBox Len(.Characters.Text)
End With
End Sub
例では、30文字毎に設定していますが、255までならOKです。
但し、Textプロパティを普通?に使うと、表示されたように255までしか表示できません。
中のテキストを取得するときも少しずつとる手法を使います。
'================================================================
Sub test3()
Dim aaa As Shape
Dim wk As String
Dim idx As Long
Dim txt As String
On Error Resume Next
Set aaa = ActiveSheet.Shapes(1)
txt = ""
idx = 1
wk = aaa.TextFrame.Characters(Start:=idx, Length:=255).Text
Do Until Err.Number <> 0
txt = txt & wk
idx = idx + 255
wk = aaa.TextFrame.Characters(Start:=idx, Length:=255).Text
Loop
MsgBox txt
MsgBox Len(txt)
On Error GoTo 0
End Sub
以上です。
|
|