- ベストアンサー
Word VBA テキストボックス内の文字取得方法
- 質問者はWordのVBAで漢字の後ろに「☆★」を入力するマクロを作成していますが、テキストボックス内の文字には付けることができません。
- テキストボックス内の文字を取得するためにはどうすればよいか悩んでいます。
- 質問者は既存のマクロではうまくいかないため、解決策を探しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
専門家でもありませんし、word VBAを使用する事もありませんのでご参考まで。 Sub test() Dim shp As Shape Dim txt, buf, mystr As String Dim i, CD As Long Dim flag As Boolean For Each shp In ActiveDocument.Shapes If shp.Type = msoTextBox Then txt = shp.TextFrame.TextRange.Text mystr = "" For i = 1 To Len(txt) - 1 '漢字判定用フラグ flag = False '1文字づつ取得 buf = Mid(Trim(txt), i, 1) '文字列を全角変換 CD = Asc(StrConv(buf, vbWide)) If CD < -950 And CD > -30560 Then flag = True 'If CD >= -30561 And CD <= -26510 Then flag = True 'If CD >= -26415 And CD <= -5468 Then flag = True 'If CD >= -1444 And CD <= -949 Then flag = True If flag = True Then mystr = mystr & buf & "☆★" Else mystr = mystr & buf End If Next i shp.TextFrame.TextRange.Text = mystr End If Next shp End Sub テキストボックの文字取得は下記サイトのコードを利用 http://www.relief.jp/itnote/archives/word-vba-get-strings-text-boxes.php 下記のコードは http://okwave.jp/qa/q2176398.html で記載してあったコードです。 もしコードで漢字判定で漢字で無いものが漢字判定された場合は下記をお試し下さい。現在はコメントなるようにシングルクォーテーションを入れてありますので動作はしません。 'If CD >= -30561 And CD <= -26510 Then flag = True 'If CD >= -26415 And CD <= -5468 Then flag = True 'If CD >= -1444 And CD <= -949 Then flag = True
お礼
ありがとうございます! とり急ぎのお礼です。 実行してみたところ、1番最初に見つかったテキストボックスにしか「☆★ が付きませんでした。 ちゃんと、「For Each shp In ActiveDocument.Shapes」で「Shapes」を探しているはずなのに・・・ 私なりに、もう少し調べさせていただきます。 また、私もネットで探したつもりでしたが、全然見つからなかったのに、見つけていただき、ありがとうございました。
補足
ありがとうございました。 時間がないので、十分な検証は出来なかったのですが、もう、テキストボックス内の文字については、いったん、新規作成した文書にコピー&ペーストし、そこでルビの作業をしてから、元に戻すことにしました。 ありがとうございました。 Word VBAは、ふだん、全く使わないので、全然分かりませんが、仕事が落ち着いてから、ゆっくり考えてみます。