【问题标题】:How to extract / delete first word of each page?如何提取/删除每页的第一个单词?
【发布时间】:2017-03-20 04:08:03
【问题描述】:

我做了一个邮件合并来创建包含客户信息的动态单词页面。

然后我做了一个宏(通过在网上查看)将结果文件分成几页,每页保存为一个文件。

现在我希望为这些文件提供一些包含客户信息的名称。我用谷歌搜索了一下,我认为(唯一的?)方法是在页面的最开始创建一个包含该信息的合并字段,然后使用宏从页面中提取并删除它以将其放入文件名中。

示例:如果我有一个名为 Stackoverflow 的客户,我想要一个名为 Facture_Stackoverflow.doc 的文件。

我不知道如何从我的页面中选择、提取然后删除第一个单词。

这是我的“分割宏”,它目前只使用递增的 ID 命名文件:

Sub DecouperDocument()
    Application.Browser.Target = wdBrowsePage

    For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages")

        ActiveDocument.Bookmarks("\page").Range.Copy

        Documents.Add
        Selection.Paste

        Selection.TypeBackspace
        ChangeFileOpenDirectory "C:\test\"
        DocNum = DocNum + 1
        ActiveDocument.SaveAs FileName:="Facture_" & DocNum & ".doc"
        ActiveDocument.Close

        Application.Browser.Next
    Next i
    ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub

【问题讨论】:

    标签: vba ms-word extract word-2007


    【解决方案1】:

    下面的函数将使您能够提取 Word 文档的第一个单词(并且可以选择删除它)。

    Public Function GetFirstWord(Optional blnRemove As Boolean = True) As String
    
        Dim rng As Range
        Dim intCharCount As Integer
        Dim strWord As String
    
        With ThisDocument
            Set rng = .Characters(1)
    
            intCharCount = rng.EndOf(wdWord, wdMove)
    
            With .Range(0, intCharCount - 1)
                strWord = .Text
                If blnRemove Then
                    .Delete
                End If
            End With
        End With
    
        GetFirstWord = strWord
    
    End Function
    

    我希望这会有所帮助。

    【讨论】:

    • 嗨 creamyegg。非常感谢您的回答。我在主循环中调用了您的函数,但不幸的是执行错误 4608:值超出范围。调试器显示“With .Range(0, intCharCount - 1)”行,你知道我做错了什么吗?如果 intCharCount 的值为 0... 是什么意思?可能是因为我的页面标题?
    • intCharCount 应该返回文档中第一个空白字符的字符位置。我认为 intCharCount 只会在文档为空时为零,即其中没有字母、单词或空格。
    • 可能是这样。我提供的功能仅适用于代码所在的文档(ThisDocument)。再次查看您问题中的代码,尝试将我的函数更改为使用 ActiveDocument 而不是 ThisDocument。
    • 那我是不是用错误的方式调用你的函数?我确定我的页面不是空的。编辑:我刚刚注意到 ThisDocument 的值是“Normal.dotm”。不应该是我的文件吗?我为 ActiveDocument 更改了它,但这也不起作用,因为 ActiveDocument 并不总是原始文件。回答后的第二次编辑:清除问题。使用 ActiveDocument,它第一次工作,但在第二次,ActiveDocument 设置为我在循环中进一步打开的文档。
    • 您在代码中的哪个位置调用了该函数?我想如果你用函数调用替换 DocNum + 1 应该没问题。
    猜你喜欢
    • 2021-12-11
    • 2018-04-05
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2020-06-07
    相关资源
    最近更新 更多