2016-06-08 117 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

相關問題