2016-06-08 241 views
0

我正在尝试打开一个Word文档的VBA脚本,看起来像“TPXXXX”,其中“X”是数字,然后粘贴文本转换为Excel电子表格。我可以打开Word文档,但是我无法选择和查找需要的文本。到目前为止,我有:打开Word文档,复制特定文本,粘贴到Excel电子表格中

Sub Copy() 

'Create variables 
Dim Word As New Word.Application 
Dim WordDoc As New Word.Document 
Dim Doc_Path As String 
Dim WB As Workbook 
Dim WB_Name As String 

Doc_Path = "C:\Path\To\File.docx" 
Set WordDoc = Word.Documents.Open(Doc_Path) 

'Find text and copy it (part that I am having trouble with) 
Selection.Find.ClearFormatting 
With Selection.Find 
    .Text = "TP" 
    .Format = False 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchWildcards = False 
End With 
Selection.Find.Execute 
Selection.EscapeKey 
Selection.MoveLeft Unit: wdCharacter , Count:=2 
Selection.MoveRight Unit: wdCharacter , Count:=4 
Selection.Copy 

'Open excel workbook and paste 
WB_Name = Application.GetOpenFilename(",*.xlsx") 
Set WB = Workbooks.Open(WB_Name) 

WB.Sheets("Sheet1").Select 
Range("AB2").Select 
ActiveSheet.Paste 
WordDoc.Close 
Word.Quit 

End Sub 

任何人都可以给我一些指针吗?

回答

1

这里的Excel版本:

Sub CopyTPNumber() 

    'Create variables 
    Dim Word As New Word.Application 
    Dim WordDoc As New Word.Document 
    Dim r As Word.Range 
    Dim Doc_Path As String 
    Dim WB As Excel.Workbook 
    Dim WB_Name As String 

    Doc_Path = "C:\temp\TestFind.docx" 
    Set WordDoc = Word.Documents.Open(Doc_Path) 
    ' Set WordDoc = ActiveDocument 

    ' Create a range to search. 
    ' All of content is being search here 
    Set r = WordDoc.Content 

    'Find text and copy it (part that I am having trouble with) 
    With r 
     .Find.ClearFormatting 
     With .Find 
      .Text = "TP[0-9]{4}" 
      .Format = False 
      .MatchCase = False 
      .MatchWholeWord = False 
      .MatchWildcards = True 
      .Execute 
     End With 
     .Copy 
     ' Debug.Print r.Text 
    End With 


    'Open excel workbook and paste 
    WB_Name = Excel.Application.GetOpenFilename(",*.xlsx") 
    Set WB = Workbooks.Open(WB_Name) 

    WB.Sheets("Sheet1").Select 
    Range("AB2").Select 
    ActiveSheet.Paste 
    WordDoc.Close 
    Word.Quit 

End Sub 
+0

这是完美的!你知道我将如何创建一个循环找到所有的TP号码? – electronicaneer

+0

而不是'.Execute',你可以做一个循环:'执行while.Execute'。例如,请参阅[这里](http://superuser.com/questions/1009085/find-all-instances-of-a-text-and-make-it-a-hyperlink-with-a-macro)。 – xidgel

+0

还有一件事,如果没有更多的TPXXXX号码,我将如何停止循环? TP号码的数量根据我需要复制的每个文件而有所不同,我能想到的唯一可能是计算TP号码的数量,然后使用For循环多次迭代。 – electronicaneer

0

这可能让你开始:

Selection.Find.ClearFormatting 
With Selection.Find 
    .Text = "TP[0-9]{4}" 
    .Format = False 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchWildcards = True 
    .Execute 
End With 
Selection.Copy 

我使用通配符匹配.MatchWildcards = True。匹配的模式由.Text = "TP[0-9]{4}"指定---匹配“TP”,然后是,正好是的四位数字。如果您的应用中的位数不同,请将{4}替换为{3,5}

希望帮助

+0

哎呀---上面的代码片段从Word内运行,而不是从Excel中。请参阅下面的Excel版本。 – xidgel

+0

在Excel和Word之间切换时,VBA代码有何不同? – electronicaneer

+0

如果VBA代码是从Word运行的,则可以访问Word中的'Selection'对象;如果从Excel中运行,则无法访问Word的“选择”(至少我不知道该怎么做)。这就是我使用'Word.Range'对象的原因。 – xidgel

相关问题