0

我想将所有字幕从一种类型更改为另一种类型。虽然不会意外修改任何其他归档代码。

我想出的过程有两个步骤:首先更改域代码内的文本和它之前的文本。

即从

表 { 序列表 * 阿拉伯语 }

图 { 序列图 * 阿拉伯文 }

我已经尝试过手动编辑和更改内部类型不会自动更改字段外部的标签。

要更改我使用查找/替换的文本,效果很好:

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

谢谢斯科特,这是一个很大的帮助!

仅缺少项目,在代码的替换部分中需要.Text。然而,您仅替换一个单词而不是整个文本的解决方案要优雅得多。

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 回答