Word (VBA)

Word VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Home Premium : Word 2010)
ルビーを設定すると次に設定されているRangeの範囲がおかしくなる
投稿日時: 17/12/21 10:25:20
投稿者: わん0623

次のコードを実行すると、test2の選択範囲が1回目と2回目で異なります。
回避する方法はありますでしょうか?
 
よろしくお願いいたします。
 
Sub test()
ActiveDocument.StoryRanges(wdMainTextStory).Delete
ActiveDocument.Range(0, 0).Text = "るびーのてすと"
ActiveDocument.Range(0, 3).Select
Dim test1 As Range
Set test1 = Selection.Range
ActiveDocument.Range(3, 6).Select
Dim test2 As Range
Set test2 = Selection.Range
ActiveDocument.Range(0, 0).Select
test1.Select
test2.Select '1回目の選択
test1.PhoneticGuide Text:="2"
test2.Select '2回目の選択
End Sub

回答
投稿日時: 17/12/22 10:20:19
投稿者: んなっと

Sub test0()
  Dim test1 As Range
  Dim test2 As Range
  ActiveDocument.StoryRanges(wdMainTextStory).Delete
  ActiveDocument.Range(0, 0).Text = "るびーのてすと"
  Set test1 = ActiveDocument.Range(0, 3)
  Set test2 = ActiveDocument.Range(3, 6)
  test1.Select
  Debug.Print test1.Start; test1.End; test1.Text
  Debug.Print test2.Start; test2.End; test2.Text
  test1.PhoneticGuide Text:="2"
  Debug.Print test1.Start; test1.End; test1.Text
  Debug.Print test2.Start; test2.End; test2.Text
End Sub
 
【結果】
0 3 るびー
3 6 のてす
0 0
0 65 ●のてす
 
【わかったこと】
 
最初
 
| test1 | test2 |
 
ルビを振ると
 [るびー(2)]
||    test2    |

test1
の長さが0になってしまう。
新しく挿入された[るびー(2)]test2に無理やり押し付けられる。
 
【対策】
 
[るびー(2)]のかたまりで1文字に数えられるので、こんなふうに2行追加するのはどうでしょうか。
 
Sub test0()
  Dim test1 As Range
  Dim test2 As Range
  ActiveDocument.StoryRanges(wdMainTextStory).Delete
  ActiveDocument.Range(0, 0).Text = "るびーのてすと"
  Set test1 = ActiveDocument.Range(0, 3)
  Set test2 = ActiveDocument.Range(3, 6)
  test1.Select
  Debug.Print test1.Start; test1.End; test1.Text
  Debug.Print test2.Start; test2.End; test2.Text
  test1.PhoneticGuide Text:="2"
  test1.MoveEnd , 1 '末尾を1文字右にずらして拡大
test2.MoveStart , 1 '先頭を1文字右にずらして縮小
Debug.Print test1.Start; test1.End; test1.Text
  Debug.Print test2.Start; test2.End; test2.Text
End Sub
 
【結果】
0 3 るびー
3 6 のてす
0 62 ●
62 65 のてす
 
ルビを振った後Start,Endプロパティが65のように急に大きくなるのは、フィールドコードを表示すればわかります。
{EQ \* jc2 \* "Font:MS Pゴシック" \* hps12 \o\ad(\s\up 11(2),るびー)}のてす

投稿日時: 17/12/22 11:21:09
投稿者: わん0623

ご回答ありがとうございます。
 
Test2の方ばかりに目が行っていましたが、test1の長さが0になるんですね?
教えて頂いたことをよく読んで理解したいと思います。
 
ありがとうございます。今後ともよろしくお願い致します。