Управление Excel с помощью VBA Слова в Microsoft Excel 2010
Бывают случаи, когда нам нужно копировать данные из текстового документа в файл Excel. Мы можем сделать это очень легко с помощью макроса во всех версиях офиса. Макрос откроет существующий / новый файл Excel, скопирует содержимое, а затем сохранит и закроет файл. Посмотрим, как это делается.
Option Explicit __ Sub OpenAndReadWordDoc ()
Dim tString As String Dim p As Long, r As Long Dim wrdApp As Object, wrdDoc As Object Dim wb As Workbook Dim trange As Variant _Set wb = Workbooks.Add With wb.Worksheets (1) .Range («A1»)
wrdApp.Visible = True Установить wrdDoc = wrdApp.Documents.Open («B: \ Test \ MyNewWordDoc.docx») _ _With wrdDoc For p = 1 to .Paragraphs.Count Set trange = .Range (Start: =. Paragraphs (p ) .Range.Start, _ End: =. Paragraphs (p) .Range.End)
tString = trange.Text tString = Left (tString, Len (tString) -1) _ If Instr (1, tString, ”1”)> 0 Тогда wb.Worksheets (1) .Range («A» & r) .Value = tString r = r + 1 End If Next p .Close End With wrdApp.Quit Set wrdDoc = Nothing Set wrdApp = Nothing wb.Saved = True End Sub Чтобы скопировать указанный выше код в свой файл, нажмите Alt + F11 на клавиатуре. слева вы увидите объекты Microsoft Excel. Щелкните правой кнопкой мыши и выберите «Вставить». Затем щелкните «Модуль». * Скопируйте код в окно кода справа. Теперь давайте посмотрим, как работает этот код. Сначала мы объявляем нужные нам переменные –tstring в виде строка для хранения текста (какой текст мы увидим позже). 2 переменных «p» и «r» в качестве счетчиков. Это «длинные». Затем у нас есть 2 объектные переменные wrdApp и wrdDoc. wrdApp — это объект приложения Word, а wrdDoc — объект документа Word. Wb — это наша переменная книги для новой книги, которая создается в коде. Если вы открываете существующую книгу, вы можете вместо нее назначить эту переменную. Последняя переменная — это переменная типа trange, содержащая содержимое, которое необходимо перенести из word doc в файл excel.
Set wb = Workbooks.Add Присваивает новую книгу переменной wb. Если вы не хотите добавлять новую книгу, а открывать существующую книгу, вы можете изменить эту строку следующим образом: * Set wb — Workbooks.Open («B: \ Test \ File1.xlsx») _With wb.Worksheets ( 1) .Range («A1»)
Эти строки кода помещают текст «Word Document Contents:» с полужирным шрифтом и размером шрифта 14 в ячейку A1 рабочего листа 1 ^ st ^ в новой книге. Затем .Offset (1,0) .Select выбирает следующую строку.
r = 3 Переменной «r» присваивается значение 3, поскольку это начальная строка в файле Excel для данных, которые будут скопированы из текстового документа.
Set wrdApp = CreateObject («Word.Application») _ Если Word уже запущен в вашей системе, _CreateObject * создаст новый экземпляр Word. Таким образом, эта строка назначает объектную переменную wrdApp приложению Word, которое вы можете использовать позже в коде.
wrdApp.Visible = True Вновь созданный экземпляр Word не будет виден при создании. Чтобы сделать его видимым, вам нужно установить wrdApp.Visible = True, чтобы он был видимым.
_Set wrdDoc = wrdApp.Documents.Open («B: \ Test \ MyNewWordDoc.docx») _ Мы создали новый экземпляр приложения Word, но мы еще не открыли исходный документ Word. Таким образом, эта команда откроет документ Word. Этому документу назначен объект wrdDoc, поэтому мы можем использовать его позже в коде.
With wrdDoc… .End With Это наш цикл «With», который будет полностью работать с объектом wrdDoc. Как только вы откроете этот цикл, вам не нужно снова повторять текст «wrdDoc» в этом цикле. Вы можете сразу начать с точки («.»)
перед любыми объектами, относящимися к wrdDoc. Этот цикл заканчивается оператором End With. После ввода оператора End With вы не можете ссылаться на объекты после wrdDoc только с «.».
For p = 1 to .Paragraphs.Count Это цикл «For», который будет повторяться от 1 ^ st ^ до последних абзацев в текстовом документе. Словарный файл, содержащий данные, содержит 100 строк информации, каждая из которых хранится как отдельный абзац. Цикл увеличится от 1 до 100 и скопирует абзацы. Если заданы определенные условия, копирование и вставка будет основываться на этих условиях.
_Set trange = .Range (Start: =. Paragraphs (p) .Range.Start, End: =. Paragraphs (p) .Range.End) _ Это назначает начало и конец каждого абзаца диапазону по мере увеличения цикла.
_tString = trange.text tString = Left (tString, len (tString) -1) _ Сначала текст из trange передается в TString. Затем каждый абзац имеет символ абзаца в конце предложения. Это удаляется с помощью функции Left. С левой стороны все символы, кроме последнего, хранятся в переменной tString.
If Instr (1, tString, «1»)> 0 Then wb.Worksheets (1) .Range («A» & r) .Value = tString r = r + 1 End If Эта функция IF проверяет, содержит ли текст в tString число 1. Если это правда, то он копирует содержимое tString в следующую доступную строку в книге. Сначала «r» имело значение 3. Используя r = r + 1, мы увеличиваем его на 1, чтобы следующую запись можно было разместить под предыдущей.
Next p .Close Строка кода Next p переходит к следующему абзацу.
.Close закрывает документ, когда все абзацы были обработаны. Это результат, который мы получаем в файле Excel —
Вы увидите, что в вывод включены только те абзацы, которые содержат цифру 1 в любом месте номера.
wrdApp.Quit Set wrdDoc = Ничего не установлено wrdApp = Ничего wb.Saved = True wrdApp.Quit закроет слово «Приложение». Установите wrdDoc = Nothing и Set wrdApp = Nothing освободит память, занятую этими двумя объектными переменными, и установит для них значение Nothing. wb.Saved = True сохранит книгу.
С помощью приведенного выше кода мы можем контролировать, какие данные должны быть скопированы из файла Word в файл Excel.