Kontroluj Excel z Worda za pomocą VBA w Microsoft Excel 2010

Anonim

Czasami musimy skopiować dane z dokumentu Word do pliku Excela. Możemy to zrobić bardzo łatwo za pomocą makra we wszystkich wersjach pakietu Office. Makro otworzy istniejący / nowy plik Excela, skopiuje zawartość, a następnie zapisze i zamknie plik. Zobaczmy, jak to się robi.

Opcja Wyraźna


Sub OpenAndReadWordDoc()
Dim tString As String
Dim p tak długo, r tak długo
Dim wrdApp As Object, wrdDoc As Object
Dim wb jako skoroszyt
Dim trrange jako wariant

Ustaw wb = Skoroszyty.Dodaj
Z wb.Worksheets(1).Range(„A1”)
.Value = „Zawartość dokumentu Word:”
.Czcionka.Pogrubienie = Prawda
.Rozmiar.Czcionki = 14
.Przesunięcie(1,0).Wybierz
Kończyć z

r = 3

Ustaw wrdApp = CreateObject("Word.Application")
wrdApp.Visible = Prawda
Ustaw wrdDoc = wrdApp.Documents.Open("B:\Test\MyNewWordDoc.docx")

Z wrdDoc
Dla p = 1 do .Paragraphs.Count
Ustaw trange = .Range(Start:=.Paragraphs(p).Range.Start, _
Koniec:=.Paragrafy(p).Zakres.Koniec)
tString = trrange.Tekst
tString = Left(tString, Len(tString)-1)

Jeśli Instr(1, tString”,1”) > 0 Wtedy
wb.Worksheets(1).Range(„A” & r).Value = tString
r=r+1
Zakończ, jeśli

Następny p
.Blisko

Kończyć z

wrdApp.Zamknij
Ustaw wrdDoc = Nic
Ustaw wrdApp = Nic
wb.Zapisany = Prawda

Napis końcowy

Aby skopiować powyższy kod do swojego pliku,

  • Naciśnij Alt + F11 na klawiaturze
  • Po lewej stronie zobaczysz obiekty Microsoft Excel
  • Kliknij prawym przyciskiem myszy i wybierz Wstaw
  • Następnie kliknij Moduł
  • Skopiuj kod do okna kodu po prawej stronie

Zobaczmy teraz, jak działa ten kod -

Najpierw deklarujemy zmienne, których potrzebujemy -tstring jako ciąg do przechowywania tekstu (później zobaczymy jaki tekst). 2 zmienne „p” i „r” jako liczniki. Są to typy „długie”. Następnie mamy 2 zmienne obiektowe wrdApp i wrdDoc. wrdApp to obiekt aplikacji Word, a wrdDoc to obiekt dokumentu Word. Wb to nasza zmienna skoroszytu dla nowego skoroszytu, który jest tworzony w kodzie. Jeśli otwierasz istniejący skoroszyt, możesz zamiast tego przypisać tę zmienną. Ostatnią zmienną jest zmienna typu trrange, która będzie miała zawartość, którą należy przenieść ze słowa doc do pliku excel.

Ustaw wb = Skoroszyty.Dodaj

To przypisuje nowy skoroszyt do zmiennej wb. Jeśli nie chcesz dodawać nowego skoroszytu, ale otworzyć istniejący skoroszyt, możesz zmienić ten wiersz w następujący sposób:
Set wb - Workbooks.Open(„B:\Test\File1.xlsx”)

Z wb.Worksheets(1).Range(„A1”)
.Value = „Zawartość dokumentu Word:”
.Czcionka.Pogrubienie = Prawda
.Rozmiar.Czcionki = 14
.Przesunięcie(1,0).Wybierz
Kończyć z

Z wb.Worksheets(1).range("A1") jest szybkim sposobem odwoływania się do niego. Nie musisz więc powtarzać tego dla każdej linii kodu między instrukcjami With i End with.

Te wiersze kodu umieszczają tekst „Zawartość dokumentu Word:” z pogrubioną czcionką i rozmiarem czcionki 14 w komórce A1 1NS arkusz w nowym skoroszycie. A następnie .Offset(1,0).Select wybiera następny wiersz.

r = 3

Zmienna „r” ma przypisaną wartość 3, ponieważ jest to początkowy wiersz w pliku Excela dla danych, które mają zostać skopiowane z dokumentu Word.

Ustaw wrdApp = CreateObject("Word.Application")

Jeśli program Word jest już uruchomiony w twoim systemie,Utwórz obiektutworzy nową instancję programu Word. Tak więc ta linia przypisuje zmienną obiektu wrdApp do aplikacji Word, której możesz użyć w dalszej części kodu.

wrdApp.Visible = Prawda

Nowo utworzone wystąpienie programu Word nie będzie widoczne podczas jego tworzenia. Aby był widoczny, musisz ustawić wrdApp.Visible = True, aby był widoczny.

Ustaw wrdDoc = wrdApp.Documents.Open("B:\Test\MyNewWordDoc.docx")

Stworzyliśmy nową instancję aplikacji Word, ale nie otworzyliśmy jeszcze źródłowego dokumentu Word. Więc to polecenie otworzy dokument Word. Obiekt wrdDoc został przypisany do tego dokumentu, więc możemy go użyć w dalszej części kodu.

Z wrdDoc… .Zakończ na

To jest nasza pętla „With”, która będzie działać całkowicie z obiektem wrdDoc. Po otwarciu tej pętli nie musisz ponownie powtarzać tekstu „wrdDoc” w tej pętli. Możesz zacząć bezpośrednio od kropki („.”) przed dowolnymi obiektami związanymi z wrdDoc. Ta pętla kończy się na Kończyć z oświadczenie. Po wprowadzeniu instrukcji End With nie można odwoływać się do obiektów po wrdDoc za pomocą samego „.”.

Dla p = 1 do .Paragraphs.Count

To jest pętla „For”, która zapętli się od 1NS do ostatnich akapitów w dokumencie Word. Plik słowny, który zawiera dane, zawiera 100 wierszy informacji, z których każdy jest przechowywany w osobnym akapicie. Pętla zwiększy się od 1 do 100 i skopiuje akapity. Jeśli zostaną ustawione pewne warunki, kopiowanie wklejanie będzie oparte na tych warunkach.

Ustaw trange = .Range(Start:=.Paragraphs(p).Range.Start, End:=.Paragraphs(p).Range.End)

Przypisuje to początek i koniec każdego akapitu do zakresu w miarę wzrostu pętli.

tString = trrange.tekst
tString = Left(tString,len(tString)-1)

Najpierw tekst z trrange jest przekazywany do TString. Następnie każdy akapit ma znak akapitu na końcu zdania. Jest to usuwane za pomocą funkcji Left. Od lewej wszystkie znaki oprócz ostatniego są przechowywane w zmiennej tString.

Jeśli Instr(1, tString, “1”) > 0 Wtedy
wb.Worksheets(1).Range(„A” & r).Value = tString
r=r+1
Zakończ, jeśli

Ta funkcja JEŻELI sprawdza, czy tekst w tString zawiera liczbę 1. Jeśli to prawda, kopiuje zawartość tString do następnego dostępnego wiersza w skoroszycie. „r” początkowo miało wartość 3. Używając r=r+1, zwiększamy ją o 1, aby następny wpis mógł być umieszczony poniżej poprzedniego.

Następna p
.Blisko

ten Następna p wiersz kodu zwiększa się do następnego akapitu.

.Blisko zamyka dokument po przepracowaniu wszystkich paragrafów. To jest wynik, który otrzymujemy w pliku Excela -

Zobaczysz, że tylko te akapity, które zawierają cyfrę 1 w dowolnym miejscu, są uwzględniane w wyniku.

wrdApp.Zamknij
Ustaw wrdDoc = Nic
Ustaw wrdApp = Nic
wb.Zapisany = Prawda

wrdApp.Quit zamknie słowo Application. Set wrdDoc = Nothing i Set wrdApp = Nothing zwolni pamięć zajętą ​​przez te dwie zmienne obiektu i ustawi je na Nothing. wb.Saved = True zapisze skoroszyt.

Za pomocą powyższego kodu możemy kontrolować, które dane mają zostać skopiowane z pliku Word do pliku Excel.