Управлявайте Excel от Word с помощта на VBA в Microsoft Excel 2010

Anonim

Понякога се налага да копираме данни от word документ в Excel файл. Можем да направим това много лесно с макрос във всички версии на офиса. Макросът ще отвори съществуващ / нов Excel файл, ще копира съдържанието и след това ще запише и затвори файла. Да видим как се прави това.

Опция Изрично


Sub OpenAndReadWordDoc ()
Dim tString As String
Dim p As Long, r As Long
Затъмнете wrdApp като обект, wrdDoc като обект
Dim wb Като работна книга
Dim trange като вариант

Задайте wb = Работни книги
С wb.Worksheets (1). Range („A1“)
.Value = „Съдържание на документ на Word:“
.Font.Bold = Вярно
.Размер на шрифта = 14
.Офсет (1,0) .Изберете
Край с

r = 3

Задайте wrdApp = CreateObject („Word.Application“)
wrdApp.Visible = Вярно
Задайте wrdDoc = wrdApp.Documents.Open („B: \ Test \ MyNewWordDoc.docx“)

С wrdDoc
За p = 1 до. Параграфи. Брой
Задайте trange = .Range (Старт: =. Параграфи (p). Range.Start, _
Край: =. Параграфи (p). Range.End)
tString = trange.Text
tString = Наляво (tString, Len (tString) -1)

Ако Instr (1, tString, ”1”)> 0 Тогава
wb.Worksheets (1) .Range (“A” & r) .Value = tString
r = r+1
Край Ако

Следващ стр
.Близо

Край с

wrdApp.Quit
Задайте wrdDoc = Нищо
Задайте wrdApp = Нищо
wb.Saved = Вярно

End Sub

За да копирате горния код във вашия файл,

  • Натиснете Alt + F11 на клавиатурата
  • От лявата страна ще видите Microsoft Excel Objects
  • Щракнете с десния бутон и изберете Вмъкване
  • След това щракнете върху Модул
  • Копирайте кода в кодовия прозорец вдясно

Сега нека видим как работи този код -

Първо декларираме необходимите ни променливи -tstring като низ за съхраняване на текст (ще видим какъв текст по -късно). 2 променливи „p“ и „r“ като броячи. Те са от „дълъг“ тип. След това имаме 2 обектни променливи wrdApp и wrdDoc. wrdApp е обектът за приложение на думата, а wrdDoc е обектът на документ на Word. Wb е нашата променлива на работната книга за новата работна книга, която е създадена в кода. Ако отваряте съществуваща работна книга, вместо това можете да присвоите тази променлива на тази. Последната променлива е тип променлива на trange вариант, който ще съдържа съдържанието, което трябва да бъде прехвърлено от думата doc в Excel файла.

Задайте wb = Работни книги

Това присвоява новата работна книга на променливата wb. Ако не искате да добавяте нова работна книга, но отваряте съществуваща работна книга, можете да промените този ред, както следва -
Задайте wb - Workbooks.Open (“B: \ Test \ File1.xlsx”)

С wb.Worksheets (1). Range („A1“)
.Value = „Съдържание на документ на Word:“
.Font.Bold = Вярно
.Размер на шрифта = 14
.Офсет (1,0) .Изберете
Край с

Обхватът With wb.Worksheets (1) .range (“A1”) е бърз начин да го препратите. Така че не е нужно да го повтаряте за всеки от кодовите редове между With и End с изрази.

Тези редове код се поставят в текста „Съдържание на документ на Word:“ с удебелен шрифт и размер на шрифта 14 в клетка A1 на 1ул работен лист в новата работна книга. И след това .Offset (1,0) .Select избира следващия ред.

r = 3

На променливата “r” се присвоява стойност 3, тъй като това е началният ред в Excel файла за данните, които трябва да бъдат копирани от word документ.

Задайте wrdApp = CreateObject („Word.Application“)

Ако Word вече работи във вашата система,CreateObjectще създаде нов екземпляр на Word. Така че този ред присвоява обектната променлива wrdApp на Word приложението, което можете да използвате по -късно в кода.

wrdApp.Visible = Вярно

Новосъздаденият екземпляр на Word няма да се вижда, когато бъде създаден. За да стане видимо, трябва да зададете wrdApp.Visible = True, така че да се вижда.

Задайте wrdDoc = wrdApp.Documents.Open ("B: \ Test \ MyNewWordDoc.docx")

Създадохме новия екземпляр на думата приложение, но все още не сме отворили документ с изходна дума. Така че тази команда ще отвори думата документ. Обектът wrdDoc е присвоен на този документ, така че можем да го използваме по -късно в кода.

С wrdDoc …. Край с

Това е нашият цикъл „С“, който ще работи изцяло с обекта wrdDoc. След като отворите този цикъл, не е нужно да повтаряте отново текста „wrdDoc“ в този цикъл. Можете директно да започнете с точката (“.”) Преди обекти, свързани с wrdDoc. Този цикъл завършва с Край с изявление. След като операторът End With е въведен, не можете да се позовавате на обектите след wrdDoc само с „.“.

За p = 1 до. Параграфи. Брой

Това е цикълът „For“, който ще се върти от 1ул до последните параграфи в word документ. Word файлът, който съдържа данните, има 100 реда информация, всеки съхранен като отделен параграф. Цикълът ще се увеличи от 1 до 100 и ще копира абзаците. Ако са зададени определени условия, копиращата паста ще се основава на тези условия.

Задайте trange = .Range (Начало: =. Параграфи (p). Range.Start, End: =. Параграфи (p). Range.End)

Това определя началото и края на всеки параграф, за да варира с увеличаване на цикъла.

tString = trange.text
tString = Наляво (tString, len (tString) -1)

Първо текстът от trange се предава на TString. След това всеки параграф има символ на абзац в края на изречението. Това се премахва с помощта на функцията Left. От лявата страна всички знаци с изключение на последния се съхраняват в променливата tString.

Ако Instr (1, tString, “1”)> 0 Тогава
wb.Worksheets (1) .Range (“A” & r) .Value = tString
r = r+1
Край Ако

Тази функция IF проверява дали текстът в tString съдържа числото 1. Ако е вярно, тогава копира съдържанието на tString в следващия наличен ред в работната книга. „R“ първо имаше стойност 3. Използвайки r = r+1, го увеличаваме с 1, така че следващият запис може да бъде поставен под предишния запис.

Следващ стр
.Близо

The Следващ стр ред с увеличения на кода към следващия параграф.

.Близо затваря документа, след като всички параграфи са били обработени. Това е изходът, който получаваме в Excel файла -

Ще видите, че само тези абзаци, които съдържат номер 1 навсякъде в числото, са включени в изхода.

wrdApp.Quit
Задайте wrdDoc = Нищо
Задайте wrdApp = Нищо
wb.Saved = Вярно

wrdApp.Quit ще затвори думата Application. Задайте wrdDoc = Нищо и Задайте wrdApp = Нищо няма да освободи паметта, взета от тези 2 обектни променливи, и да ги зададе на Нищо. wb.Saved = True ще запази работната книга.

С горния код можем да контролираме кои данни да се копират от word файл в excel файл.