Word VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13 / 308 ツリー ←次へ | 前へ→

【863】vba range.words コレクションのバグ? めめ 18/9/13(木) 12:28 質問[未読]
【864】Re:vba range.words コレクションのバグ? めめ 18/9/13(木) 13:46 発言[未読]
【865】Re:vba range.words コレクションのバグ? めめ 18/9/13(木) 14:39 発言[未読]

【863】vba range.words コレクションのバグ?
質問  めめ  - 18/9/13(木) 12:28 -

引用なし
パスワード
   Word2010 on Windows 7 32bitです。

サンプル
Sub test()
  Selection.Text = "マザー"
  Debug.Print "1:" & Selection.Words(1) & ";単語のみ"
  Selection.Text = "マザー "
  Debug.Print "2:" & Selection.Words(1) & ";単語+全角スペース"
  Selection.Text = "マザー "
  Debug.Print "3:" & Selection.Words(1) & ";単語+半角スペース"
  Selection.Text = "マザー チャイルド"
  Debug.Print "4:" & Selection.Words(1) & ";単語+全角スペース+単語"
  Selection.Text = "マザー チャイルド"
  Debug.Print "5:" & Selection.Words(1) & ";単語+半角スペース+単語"
  Selection.Text = "チャイルド マザー"
  Debug.Print "6:" & Selection.Words(1) & ";単語+半角スペース+単語"
End Sub

結果
1:マザー;単語のみ
2:マザー;単語+全角スペース
3:マザー;単語+半角スペース
4:マザー ;単語+全角スペース+単語
5:ー ;単語+半角スペース+単語
6:チャイルド;単語+半角スペース+単語

5のケース(音引き+半角スペース)で期待する結果を得られないのですが、こちらの環境だけでしょうか?
どなたか追試をお願いします。

【864】Re:vba range.words コレクションのバグ?
発言  めめ  - 18/9/13(木) 13:46 -

引用なし
パスワード
   コレクションの先頭にだけ発生するようなので、wordのバグだった場合の対策

Sub test2()
  With Selection
    .Text = "マザー ファーザー チャイルド"
    Debug.Print "6:" & .Words(1) & ";" & .Words(2); ";" & .Words(3) & ";2番目以降の音引きはOK"
    If .Words(1) = "ー " Then
      Debug.Print "対策:" & Left(.Text, InStr(.Text, "ー"))
    End If
  End With
End Sub

結果
6:ー ;ファーザー ;チャイルド;2番目以降の音引きはOK
対策:マザー

Words(2)の末尾に半角ブランクがついていることに注意

【865】Re:vba range.words コレクションのバグ?
発言  めめ  - 18/9/13(木) 14:39 -

引用なし
パスワード
   連投スマソ
コレクションへのアクセス方法でも結果が変わる?

Sub test3()
  Selection.Text = "マザー シスター チャイルド ファーザー "
  Dim r As Range
  Dim i As Long
  i = 1
  Debug.Print "For Each"
  For Each r In Selection.Words
    Debug.Print " " & CStr(i) & ":" & r.Text & ";"
    i = i + 1
  Next
  Debug.Print "Words(i)"
  For i = 1 To Selection.Words.Count
    Debug.Print " " & CStr(i) & ":" & Selection.Words(i).Text & ";"
  Next
End Sub

結果
For Each
1:ー ;
2:ー ;
3:チャイルド;
4:チャイルド ;
5:ファーザー;
6:ー ;
Words(i)
1:ー ;
2:シスター ;
3:チャイルド;
4: ;
5:ファーザー;
6: ;

For Each は使わないほうがよさげ。Words(i) も半角ブランクが引っ付いたり、単語と見做されたり安定しない。

13 / 308 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
207157
(SS)C-BOARD v3.8 is Free