/ / Makro do kopiowania danych z programu Word do programu Excel na podstawie nagłówków i otaczającego tekstu - excel, vba, excel-vba, ms-word

Makro do kopiowania danych z programu Word do programu Excel na podstawie nagłówków i otaczającego tekstu - excel, vba, excel-vba, ms-word

Jestem kompletnym nowicjuszem w vba i makrofotografii, więc jachciałbym prosić o pomoc. Zasadniczo dostaję plik MS Word, który zawiera 30 przypadków w każdym tygodniu, w których muszę pobrać dane i umieścić je w kolumnach w programie Excel. Chcę zautomatyzować to zadanie.

Zasadniczo plik słów MS wygląda następująco:

https://imgur.com/a/0msJs

Kopiowanie tych elementów zajmuje mi dużo czasu.

Myślę o 2 podejściach:

  1. Dodaj tagi do tytułów i cytatów, ponieważ nie mają żadnych nagłówków ani niczego, co mogłoby je odróżnić: / tytuł A vs. B i / cite 123 A.B.C. 234 (żółte i fioletowe podświetlenie na zdjęciu). I poinstruuj makro, aby wziął akapit po / title i / cite.

  2. Poinstruuj Makro, aby wyszukać cały akapit po "PRZEGLĄD:"ponieważ te dane są rozróżniane przez ten ciąg.

Streszczenie: Chcę, aby makro działało na MS Word, skopiuj wszystkie tytuły spraw (żółte) do kolumny w istniejącym arkuszu Excela, skopiuj wszystkie cytaty (fioletowy) do innej kolumny, skopiuj wszystkie przeglądy (czerwony) do innej kolumny, itp.

Przykładowy plik Excel i plik słownika: plik

Uwaga: Nazwy i aranżacje w załączonym pliku nie będą się zgadzać, ponieważ już edytowałem i sortowałem plik Excela. Potrzebuję tylko makra do skopiowania danych, a potem posortuję je później. MS Word przychodzi tak, jak jest.

Odpowiedzi:

0 dla odpowiedzi № 1

Nie zamierzam napisać kodu dla ciebie, ale dozacznij ten kod, jeśli wkleisz go do modułu vb w programie Word, skopiuje dowolny zaznaczony tekst z bieżącego dokumentu tekstowego do pustego arkusza kalkulacyjnego w programie Excel.

Sub copytext2XL()
Dim r As Range "nb this is a Word range, not an Excel range
Dim xl
Dim wb, ws, xlr
Set xl = CreateObject("Excel.Application")
xl.Visible = True
Set wb = xl.workbooks.Add
Set ws = wb.worksheets(1)
Set xlr = ws.Range("a1")

Set r = Selection.Range
r.Copy
xlr.PasteSpecial 3

End Sub

0 dla odpowiedzi nr 2

Powiedziałbym, że musisz wszystko w Excelu, jako takie.

Sub Sentence_Click()

Dim num As Variant
"Microsoft Word object
Dim objWord As Object
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
"Word document object
Dim WordNam As String
WordNam = "C:UsersExcelDesktopSeptember Week 1 2017.docx"

"Open word document
objWord.Documents.Open WordNam
j = 1
n = objWord.Documents(WordNam).Paragraphs.Count
For Each num In Array(7, 13, 23)
For i = 1 To n
If i = num Then
ThisWorkbook.Worksheets(1).Cells(j, 1) = objWord.Documents(WordNam).Paragraphs(i)
Debug.Print num
j = j + 1
End If
Next i
Next num
"Close objects
objWord.Documents.Close
objWord.Quit SaveChanges:=wdDoNotSaveChanges


End Sub

Następnie przeanalizuj dane w Excelu w dowolny sposób.

Jak widać, importuję na podstawie numeru akapitu, a nie na podstawie koloru. Myślę, że dodałeś te kolory; Nie sądzę, że dokument przychodzi do ciebie w ten sposób.