0

すべてのキャプションをあるタイプから別のタイプに変更したいと思います。他のファイルされたコードを誤って変更しないでください。

私が思いついたプロセスは 2 つのステップです。まず、フィールド コード内のテキストとその前のテキストを変更します。

つまり、から

テーブル { SEQ テーブル * ARABIC }

数字 { SEQ 数字 * ARABIC }

手動編集を試してみましたが、内部のタイプを変更しても、フィールドの外側のラベルは自動的に変更されません。

テキストを変更するには、検索/置換を使用します。これは正常に機能します。

With Selection.Find
    .Style = ActiveDocument.Styles("Caption")
    .Text = "Figure"
    .Replacement.Text = "Table"
    .Forward = True
    .Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll

フィールド コード自体を実行するには、問題が発生しています。次のコードは変更を実行します。

Dim rngTemp As Range
Set rngTemp = ActiveDocument.Fields(1).Code
rngTemp.Text = " SEQ Figure \* ARABIC "
ActiveDocument.Fields(1).Update

ただし、特定のタイプのフィールド、つまりキャプションのみが変更されるかどうかはわかりません。コードはインデックス番号に基づいてフィールドを変更します。

また、for/each で番号を i に置き換えてループさせるのにも問題があります。「オブジェクトはこのメソッドをサポートしていません」というエラーが表示されます

どんな助けでもありがとうございます。

4

2 に答える 2

1

上記のリンクに基づいて、以下のコードはどうですか(未テスト)

Dim oField As Field
Dim sCode As String
Dim bFoundOne As String

For Each oField In ActiveDocument.Fields

    If oField.Type = wdFieldSequence Then

        sCode = oField.Code

        If InStr(sCode, "Table") <> 0 Then oField.Code = Replace(sCode, "Table", "Figure")

    End If
Next
于 2012-06-28T14:04:21.767 に答える
0

ありがとうスコット、それは大きな助けになりました!

コードの置換部分に欠落しているアイテムのみがありました。テキストが必要です。それでも、テキスト全体ではなく 1 つの単語を置き換えるだけのソリューションは、はるかにエレガントです。

If InStr(sCode, "Table") <> 0 Then oField.Code.**Text** = Replace(sCode, "Table", "Figure")

検索/置換テキストを取り出して文字列にすることで、コードを適応可能にしようとしました。そこに前のテキストの検索/置換コードを追加しました。そして、適切な測定のためにカウンターに立ち往生しました。

Dim oField As Field
Dim sCode As String
Dim TypeFind As String
Dim TypeReplace As String
Dim bFoundOne As String


bFoundOne = 0

'Swap strings around as required
TypeReplace = "Table"
TypeFind = "Figure"
' = "Equation"

'-- Change Field Code --
For Each oField In ActiveDocument.Fields
    If oField.Type = wdFieldSequence Then
        sCode = oField.Code
        If InStr(sCode, TypeFind) <> 0 Then
            bFoundOne = bFoundOne + 1 'counting how many
            oField.Code.Text = Replace(sCode, TypeFind, TypeReplace)
        End If
    End If
Next

'-- Change preceding text --
With Selection.Find
    .Style = ActiveDocument.Styles("Caption")
    .Text = TypeFind
    .Replacement.Text = TypeReplace
    .Forward = True
    .Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll

MsgBox ("Changed: " & bFoundOne) 'show how many when finished
于 2012-06-29T11:01:27.963 に答える