みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Word VBA テキストボックス内の文字

仕事で、総ルビをしなければならず、漢字の後ろに「☆★」を入力するマクロを組みました。

例えば「漢☆★字☆★」をマクロで入力させ、あとは手入力で「漢☆かん★字☆じ★」と打ち、本で載っていたマクロで、ルビを振る、という手順で考えています。

しかし、テキストボックスに入っている文字に、「☆★」を付けることができませんでした。

テキストボックス内の文字を取得するには、どうすればいいでしょうか?

ちなみに、漢字の後ろに「☆★」を付けるマクロは、

Option Explicit
Sub Test()
Dim i As Integer
Dim s As String
On Error Resume Next
For i = 1 To 9999
s = ActiveDocument.Range(Start:=i - 1, End:=i).Text
If Asc(s) < -950 And Asc(s) > -30560 Then
ActiveDocument.Range(Start:=i, End:=i).Text = "☆★"
End If
Next i
End Sub

です。

全くひどいマクロですが、テキストボックス以外の部分では、それなりに結果が出ています。

「それなりに」というのは、なぜか、行頭に「☆★」が挿入されてしまう場合があったのです。

でも、それはどうせ手作業をいろいろやらないといけないので、今は無視して、テキストボックス内の文字にも、同じように「☆★」を付けたいのですが、このマクロでは、全くダメでした。

もし、お分かりになる方がおられましたら、よろしくお願い致します。

投稿日時 - 2016-03-04 20:46:39

QNo.9137900

困ってます

質問者が選んだベストアンサー

専門家でもありませんし、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

投稿日時 - 2016-03-05 10:01:46

補足

ありがとうございました。

時間がないので、十分な検証は出来なかったのですが、もう、テキストボックス内の文字については、いったん、新規作成した文書にコピー&ペーストし、そこでルビの作業をしてから、元に戻すことにしました。

ありがとうございました。

Word VBAは、ふだん、全く使わないので、全然分かりませんが、仕事が落ち着いてから、ゆっくり考えてみます。

投稿日時 - 2016-03-05 13:17:36

お礼

ありがとうございます!

とり急ぎのお礼です。

実行してみたところ、1番最初に見つかったテキストボックスにしか「☆★
が付きませんでした。

ちゃんと、「For Each shp In ActiveDocument.Shapes」で「Shapes」を探しているはずなのに・・・

私なりに、もう少し調べさせていただきます。

また、私もネットで探したつもりでしたが、全然見つからなかったのに、見つけていただき、ありがとうございました。

投稿日時 - 2016-03-05 11:46:49

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問