2012-06-05 94 views
1

我有一個包含400個多項選擇題的Microsoft Word文檔。我需要把所有這些文本放到一個Microsoft Excel圖表中,如果我有一個宏允許我選擇以a.開頭的所有文本並在a.之後的第一個段落對象處結束該段, 。將數據從MS Word移到Excel

我試圖獲得幫助,被告知使用下面的宏,但宏沒有做任何事情。我只想讓宏只選擇所有文本。如果我要在Microsoft Word中手動執行此操作,我會按住ctrl並突出顯示以a.開頭並以第一個段落對象結束的所有文本。

Sub Aselection() 
' 
' Aselection Macro 
' 

Dim pgh As Paragraph 
For Each pgh In ThisDocument.Paragraphs 
With pgh 
If Left(.Range.Text, 2) = "a." And Left(Right(.Range.Text, 3), 2) = "a." Then 
Debug.Print .Range.Text 
End If 
End With 
Next 

End Sub 
+1

我對VBA for Word並不熟悉,但是這隻會在即時窗口('Debug.Print .Range.Text')中打印找到的文本,您可以通過按下CTRL + G來打開Visual Basic編輯器。所以你需要用選擇文本或你需要做的任何事情來替換那一行。 – assylias

+0

@ user1437779:assylias是對的。一種選擇是將找到的文本存儲在數組中,然後將其導出到Excel。 –

回答

0

ThisDocument通常是指包含執行代碼的模板文檔。 改爲使用ActiveDocument

另外,@assylias在他的評論中說,Debug.Print僅用於代碼調試目的。 將整行替換爲.Range.Select

這應該工作:

Sub Aselection() 

    Dim o As Object 
    Dim pgh As Paragraph 

    Set o = CreateObject("excel.application") 
    o.workbooks.Open ("E:\Aashay Data\Projects\Excel\Carton\Screen Printing.xlsx") 
    o.ActiveWorkbook.worksheets.Add.Name = "x" 
    o.ActiveWorkbook.worksheets("x").Activate 


    For Each pgh In ActiveDocument.Paragraphs 
     With o.ActiveWorkbook.worksheets("x") 
      Debug.Print pgh.Range.Text 
      If Left(pgh.Range.Text, 2) = "a." And Left(Right(pgh.Range.Text, 3), 2) = "a." Then 
       .Cells(i, 2).Value = pgh.Range.Text 
       i = i + 1 
      End If 
     End With 
    Next 
    o.Quit 

End Sub 


編輯:回顧這一點,並測試Lorem存有文字後,我認識到Word中VBA不允許您選擇多個不連續的片段(見MS支持文章KB288424更多)。 我想最簡單的方法就是簡單地導出到excel的debug.print位置,並且我相應地編輯了我的代碼。

+0

另一種選擇是將每個'a'行添加到文本文件中,所以不必選擇所有'a'行,只需逐一找到它們,然後將它們附加到文本文件中。一旦你到達文檔的末尾,你可以做任何你需要的文本文件中的信息(並根據你需要做什麼,這可能比引入Excel的混合更容易)。 – rryanp

+0

@rryanp:我打算這麼做,但是就像OP想要的那樣簡單地把它扔到Excel中一樣簡單。所以我只是放了Excel代碼。 – 147