図形やテキストボックスの中の文字列をセルにコピーするマクロ
文字のある図形を選択した状態でマクロを実行すると
図形の中の文字列が図形の左上のセルにコピーされる
文字列に改行がある複数行の場合はコピー先も複数行になる
やっぱり可逆だよね
複数行のセルの値をまとめて1つのテキストボックスにするマクロ ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14674215.html今回のマクロはここから始まったセルの値をテキストボックスにするマクロの逆
http://blogs.yahoo.co.jp/gogowaten/14674215.html今回のマクロはここから始まったセルの値をテキストボックスにするマクロの逆
一方通行より双方向
目的は
午後ツールその55、選択セル範囲を図形のテキストボックスにする、印刷用の点線を消すマクロを追加 ( Windows ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14715274.html
http://blogs.yahoo.co.jp/gogowaten/14715274.html
このアドインで作成したテキストボックスの文字列をセルに戻せるようにすること
蛇足だけど複数列から作った文字列の場合
テキストボックスの文字列にはタブ文字(vbTab)を入れて元のセル間隔を再現しているので、Split関数でタブ文字で区切ればセルごとの文字列になる
v = Split(str, vbTab) 'タブ文字で区切って配列に入れる
あとは先頭にあるタブ文字は要らないので削除、これでOK
ここからが本当の地獄だヽ(・ω・)/
図形のテキストボックスの段落のタブの配置をVBAで正確に取得できないことがあったので調べてみた
日付って入れたセルだけ中央揃えにしたものから作ったテキストボックス、1行目(段落)を見ると
1個めのタブの配置は中央、2個めのタブの配置は左に設定されている
セルにコピーするときに反映するにはこの配置の値を取得する必要がある
この値は図形の1行目の1個めの場合は
図形.TextFrame2.TextRange.Paragraphs.Item(1).ParagraphFormat.TabStops.Item(1).Type
これで取得できる
けど状況によっては正しく取得できなくなることがある
僕の書き方が良くないのかもしれないけど、よくわからん
対処法としての結論が
正しい値を取得するには上のように図形から直接するか
変数に入れるときは
図形.TextFrame2、
図形.TextFrame2.TextRange
ここまでにする、例えば図形.TextFrame2.TextRangeから
Dim tr As TextRange2
Set tr = 図形.TextFrame2.TextRange
Set ts01 = tr.Paragraphs.Item(1).ParagraphFormat.TabStops.Item(1)
Set ts02 = tr.Paragraphs.Item(1).ParagraphFormat.TabStops.Item(2)
type01 = tr.Paragraphs.Item(1).ParagraphFormat.TabStops.Item(1).Type
type02 = tr.Paragraphs.Item(1).ParagraphFormat.TabStops.Item(2).Type
これならOK
正しい値が取得できないのはもっと深いところを変数に入れてそこから取得する時
図形.TextFrame2.TextRange.Paragraphs.Item(1)
図形.TextFrame2.TextRange.Paragraphs.Item(1).ParagraphFormat
図形.TextFrame2.TextRange.Paragraphs.Item(1).ParagraphFormat.TabStops
これを変数に入れてそこから取得するとおかしくなる
ここから経緯
Sub testtabs5()
Dim s As Shape
Set s = Selection.ShapeRange.Item(1)
Dim ts01 As TabStop2, ts02 As TabStop2
Dim type01 As MsoTabStopType, type02 As MsoTabStopType
Dim pf As ParagraphFormat2
Set pf = s.TextFrame2.TextRange.Paragraphs.Item(1).ParagraphFormat
Set ts01 = pf.TabStops.Item(1)
Set ts02 = pf.TabStops.Item(2)
type01 = pf.TabStops.Item(1).Type
type02 = pf.TabStops.Item(2).Type
End Sub
このマクロは選択図形の文字列の1行目の1個めと2個めのタブとその配置を取得するもの
配置はそれぞれtype01とtype02に取得する
期待する結果は
type01 = msoTabStopCenter '中央
type02 = msoTabStopLeft '左
なんだけど…
type01 = msoTabStopCenter '中央
type02 = msoTabStopCenter '中央
と、2個めの配置が正しく取得できていない、なんで?
取得したタブの中を見ても正しい値にはなっていない
次にタブの取得をする9,10行目をコメントアウトして
これを実行
type01 = msoTabStopCenter '中央
type02 = msoTabStopLeft '左
正確に取得できる
タブを取得した時点でおかしくなるみたい…
⊂( ・∀・)ワケ ( ・∀・)つワカ ⊂( ・∀・)つラン♪
それでも一番上から直接取得するようにして
図形.TextFrame2.TextRange.Paragraphs.Item(1).ParagraphFormat.TabStops.Item(2).Type
ってすると
正確に取得できるので
ParagraphFormatを変数に入れて
その変数からタブを取得するとおかしくなる?
ParagraphFormatの上のParagraphから取得してみる
これでも間違っている
もう1個上のTextRangeから取得してみる
正確に取得できた!
これでなんとかなるかなあ
もっと簡単にできるかと思っていたけど思わぬ落とし穴?があった
次は文字の装飾