2012-06-05 7 views
1

У меня есть документ Microsoft Word с 400 вопросами с множественным выбором. Мне нужно поместить весь этот текст в диаграмму 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 для Word, но это напечатает только найденный текст в окне Immediate ('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 


EDIT: После просмотра этого и тестирует текст Lorem Ipsum, я понял, что Слово VBA не позволяет выбрать несколько прерывистых сегментов (см статью MS Поддержка KB288424 для более). Я предполагаю, что самый простой способ - просто экспортировать в excel, где находится debug.print, и я отредактировал свой код соответствующим образом.

+0

Другой вариант - добавить каждую строку 'a' в текстовый файл, поэтому вместо того, чтобы выбирать все строки 'a', вы просто найдете их по одному, а затем добавьте их в текстовый файл. Как только вы достигнете конца документа, вы можете делать все, что вам нужно, с информацией в текстовом файле (и в зависимости от того, что вам нужно сделать, это может быть проще, чем внедрение Excel в микс). – rryanp

+0

@rryanp: Я собирался это сделать, но было просто просто выбросить его в Excel, как захотел OP. Поэтому я просто вставил код Excel. – 147