1

vba word を使用して段落内のテキストを変更しようとしています。次のコードは、Next がコレクション内の次の要素に移動しないようにします。

 Sub ReadPara()
 Dim myString$
 Dim DocPara As Paragraph

 For Each DocPara In ActiveDocument.Paragraphs
   'Debug.Print DocPara.Range.ParagraphStyle '; " - "; DocPara.Range.Text
   If Left(DocPara.Range.ParagraphStyle, Len("Heading")) = "Heading" Then
     Debug.Print DocPara.Range.ListFormat.ListString
   End If
  'This section does not go to the next element in the collection
  If InStr(DocPara.Range.Text, "HW") > 1 Then
    Debug.Print DocPar; qa.Range.Text
    myString$ = DocPara.Range.Text
    DocPara.Range.Text = myString$ & "Changed"
   '  Debug.Print DocPara.Range.Text
  End If
 Next DocPara
 End Sub
4

5 に答える 5

3

2番目の問題:

ParagraphStyleは読み取り専用Styleです。代わりに使用してください。どちらもタイプVariantなので、使用しませんSet

これを試して:

DocPara.Range.Style = ActiveDocument.Styles("Normal")
于 2012-08-19T08:20:47.753 に答える
2

これでコードは機能しますが、次の段落にはまだ進みません。私は同じ段落にとどまっているようです。次のドクパラが思うように動かない。

    Option Explicit
    Sub ReadPara()

    Dim myString$
    Dim myHeading$
    Dim DocPara As Paragraph
    For Each DocPara In ActiveDocument.Paragraphs
       If Left(DocPara.Range.ParagraphStyle, Len("Heading")) = "Heading" Then
          myHeading$ = DocPara.Range.ListFormat.ListString
       ElseIf InStr(DocPara.Range.Text, "HW") > 1 Then
          myString$ = DocPara.Range.Text
          With DocPara.Range
             myString$ = Replace(myString, "HW", "HW-" & myHeading$)
             .Text = myString$
             .Style = ActiveDocument.Styles("Normal")
          End With
       End If
    Next DocPara
    End Sub
于 2012-08-22T15:18:03.257 に答える
2

私は最初の問題を克服しましたが、それはタイプミスではありませんでした。タイプミスはメッセージにあり、私のコードにはありませんでした。新しく変更された段落のスタイルを変更できないようです。

    Option Explicit
    Sub ReadPara()
     Dim myString$
     Dim myHeading$
     Dim DocPara As Paragraph

     For Each DocPara In ActiveDocument.Paragraphs
       If Left(DocPara.Range.ParagraphStyle, Len("Heading")) = "Heading" Then
         myHeading$ = DocPara.Range.ListFormat.ListString
       ElseIf InStr(DocPara.Range.Text, "HW") > 1 Then
         myString$ = DocPara.Range.Text
         myString$ = Replace(myString, "HW", "HW-" & myHeading$)
         DocPara.Range.Text = myString$
         'The line below doesn't work at all
         Set DocPara.Range.ParagraphStyle = ActiveDocument.Styles("Normal")
       End If
     Next DocPara
     End Sub
于 2012-08-17T15:28:42.987 に答える
1

次の行ではエラーが発生し、(エラー処理によっては) 実行がループから抜け出す可能性があります。

Debug.Print DocPar; qa.Range.Text

Option Explicit各コード モジュールの先頭に入力すると (すべての変数を明示的に宣言するように強制するため)、この種のエラーはおそらく早期に発見されます。:)

于 2012-08-17T06:32:19.877 に答える