简体   繁体   English

从一个 Word 文档中选择一系列文本并复制到另一个 Word 文档中

[英]select a range of text from one Word document and copy into another Word document

I'm trying to use VBA to extract sentences in one Word document and put it into another Word document.我正在尝试使用 VBA 提取一个 Word 文档中的句子并将其放入另一个 Word 文档中。 So for example, if we need to find the title of the organization, we follow the algorithm:例如,如果我们需要找到组织的名称,我们遵循以下算法:

Search for "Title"搜索“标题”
Do (Take) each character after "Title" and (stop) until "Address"在“标题”之后做(取)每个字符并(停止)直到“地址”

The following works but there may be a more efficient way of doing this:以下工作,但可能有一个更有效的方法来做到这一点:

Sub FindIt()
    Dim blnFound As Boolean
    Dim rng1 As Range
    Dim rng2 As Range
    Dim rngFound As Range
    Dim strTheText As String

    Application.ScreenUpdating = False
    Selection.HomeKey wdStory
    Selection.Find.Text = "Title"
    blnFound = Selection.Find.Execute
    If blnFound Then
        Selection.MoveRight wdWord
        Set rng1 = Selection.Range
        Selection.Find.Text = "Address"
        blnFound = Selection.Find.Execute
        If blnFound Then
            Set rng2 = Selection.Range
            Set rngFound = ActiveDocument.Range(rng1.Start, rng2.Start)
            strTheText = rngFound.Text
            MsgBox strTheText
        End If
    End If
    'move back to beginning
    Selection.HomeKey wdStory
    Application.ScreenUpdating = True
End Sub

You can switch between documents using Activate, preferably using object variables.您可以使用 Activate 在文档之间切换,最好使用对象变量。

Microsoft MVP Jay Freedman kindly revised this for me to work without the Selection object, making it much neater. Microsoft MVP Jay Freedman 为我修改了它,以便在没有 Selection 对象的情况下工作,使其更加整洁。

Sub RevisedFindIt()
' Purpose: display the text between (but not including)
' the words "Title" and "Address" if they both appear.
    Dim rng1 As Range
    Dim rng2 As Range
    Dim strTheText As String

    Set rng1 = ActiveDocument.Range
    If rng1.Find.Execute(FindText:="Title") Then
        Set rng2 = ActiveDocument.Range(rng1.End, ActiveDocument.Range.End)
        If rng2.Find.Execute(FindText:="Address") Then
            strTheText = ActiveDocument.Range(rng1.End, rng2.Start).Text
            MsgBox strTheText
        End If
    End If
End Sub

The only remaining requirement is to get this text into the other document.剩下的唯一要求是将此文本放入另一个文档中。 Something like:就像是:

Documents(2).Range.Text = strTheText

This code will write to external file:此代码将写入外部文件:

Sub RevisedFindIt_savetofile2 () 
' Purpose: display the text between (but not including)
' the words "Title" and "Address" if they both appear.
'This file will search current document only, the data in open word document.
Dim rng1 As Range
Dim rng2 As Range
Dim strTheText As String
Dim DestFileNum As Long
Dim sDestFile As String

sDestFile = "C:\test-folder\f12.txt" 'Location of external file
DestFileNum = FreeFile()
'A valid file number in the range 1 to 511,
'inclusive. Use the FreeFile function to obtain the next available file number.

Open sDestFile For Output As DestFileNum 'This opens new file with name DestFileNum
Set rng1 = ActiveDocument.Range
If rng1.Find.Execute(FindText:="Title") Then
    Set rng2 = ActiveDocument.Range(rng1.End, ActiveDocument.Range.End)
    If rng2.Find.Execute(FindText:="Address") Then
        strTheText = ActiveDocument.Range(rng1.End, rng2.Start).Text
        MsgBox strTheText 'writes string to a message box
        Print #DestFileNum, strTheText 'Print # will write to external file with the text strTheText
    End If
End If
Close #DestFileNum 'Close the destination file
End Sub

Both Excel and Word have a Range object. Excel 和 Word 都有一个Range对象。 Because you are in Excel VBA but are trying to reference the Word Range object you need to qualify the variable declaration so that Excel knows you are using a Word Range object.因为您在 Excel VBA 中尝试引用 Word Range对象,所以您需要限定变量声明,以便 Excel 知道您使用的是 Word Range 对象。

Dim rng1 As Word.Range
Dim rng2 As Word.Range

Credit to ChipsLetten for spotting this感谢 ChipsLetten 发现了这一点

You could (preferably) use the name of the other document, rather than the index (2):您可以(最好)使用其他文档的名称,而不是索引 (2):

Documents("OtherName").Range.Text = strTheText

However, this will change the text for the entire document, so you need to navigate to where you wish to insert the text.但是,这将更改整个文档的文本,因此您需要导航到要插入文本的位置。

It is far better, if possible, that there are pre-existing Bookmarks in the document (or template) that you can refer to:如果可能,最好在文档(或模板)中有预先存在的书签,您可以参考:

Documents("OtherName").Bookmarks("bkSome").Range.Text = strTheText

Good luck.祝你好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从Xcel Vba中从一个Word文档中选择一系列文本,然后复制到另一个Word文档中 - from Xcel Vba select a range of text from one Word document and copy into another Word document select 使用 vba 并复制到另一个文档的末尾并保留格式的一个 Word 文档中的一系列文本 - select a range of text from one Word doc using vba and copy to end of another document and RETAIN formatting Select 来自一个 Word 文档的部分文本并复制到另一个 Word 文档中 - Select some parts of text from one Word document and copy into another Word document 将文本从Excel中的范围复制到Word文档 - Copy Text from Range in Excel into Word Document 使用 Word 宏/VBA 将表格从一个 Word 文档复制到另一个 Word 文档 - Use Word Macro/VBA to Copy Tables from One Word Document to Another Word Document 使用vba将ComboBox从Word文档复制到另一个Word文档 - Copy ComboBox from a Word Document to another Word Document with vba VBA 将段落和表格从一个 Word 文档复制和处理到另一个 - VBA to copy and process paragraphs and tables from one Word document to another 如何将文本从Word文档转换为另一个Word文档 - How to get text from a Word document into another Word Document 试图从另一个 Word 文档控制一个 Word 文档 - Trying to control one Word document from another Word document 复制word文档中所有突出显示的文本并将其粘贴到另一个文档中 - copy all highlighted text in a word document and paste it to another document
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM