Из word в excel vba: Работа с объектами документа | Microsoft Learn
Содержание
Работа с объектами документа | Microsoft Learn
-
Статья -
-
В Visual Basic методы изменения файлов являются методами объекта Document или коллекции Documents . В этом разделе приведены примеры Visual Basic, связанные с задачами, определенными в следующих разделах.
Создание нового документа
Коллекция Documents включает все открытые документы. Чтобы создать документ, используйте метод Add , чтобы добавить объект Document в коллекцию Documents . Следующая инструкция создает документ.
Documents.Add
Лучший способ создания документа — назначить возвращаемое значение переменной объекта. Метод Add возвращает объект Document , который ссылается на новый документ. В следующем примере объект Document , возвращенный методом Add , назначается переменной объекта . Затем задаются несколько свойств и методов объекта Document . Вы можете легко управлять новым документом с помощью объектной переменной.
Sub NewSampleDoc() Dim docNew As Document Set docNew = Documents.Add With docNew .Content.Font.Name = "Tahoma" .SaveAs FileName:="Sample.doc" End With End Sub
Открытие документа
Чтобы открыть существующий документ, используйте метод Open с коллекцией Documents . Следующая инструкция открывает документ с именем Sample.doc, расположенный в папке MyFolder.
Sub OpenDocument() Documents.Open FileName:="C:\MyFolder\Sample.doc" End Sub
Сохранение существующего документа
Чтобы сохранить один документ, используйте метод Save с объектом Document . Следующая инструкция сохраняет документ с именем Sales.doc.
Sub SaveDocument() Documents("Sales.doc").Save End Sub
Вы можете сохранить все открытые документы, применив метод Save к коллекции Documents . Следующая инструкция сохраняет все открытые документы.
Sub SaveAllOpenDocuments() Documents.Save End Sub
Сохранение нового документа
Чтобы сохранить один документ, используйте метод SaveAs2 с объектом Document . Следующая инструкция сохраняет активный документ как «Temp.doc» в текущей папке.
Sub SaveNewDocument() ActiveDocument.SaveAs FileName:="Temp.doc" End Sub
Аргумент FileName может включать только имя файла или полный путь (например, «C:\Documents\Temporary File.doc»).
Закрытие документов
Чтобы закрыть один документ, используйте метод Close с объектом Document . Следующая инструкция закрывает и сохраняет документ с именем Sales. doc.
Sub CloseDocument() Documents("Sales.doc").Close SaveChanges:=wdSaveChanges End Sub
Вы можете закрыть все открытые документы, применив метод Close коллекции Documents . Следующая инструкция закрывает все документы без сохранения изменений.
Sub CloseAllDocuments() Documents.Close SaveChanges:=wdDoNotSaveChanges End Sub
В следующем примере пользователю предлагается сохранить каждый документ перед закрытием документа.
Sub PromptToSaveAndClose() Dim doc As Document For Each doc In Documents doc.Close SaveChanges:=wdPromptToSaveChanges Next End Sub
Активация документа
Чтобы изменить активный документ, используйте метод Activate с объектом Document . Следующая инструкция активирует открытый документ с именем Sales.doc.
Sub ActivateDocument() Documents("Sales.doc").Activate End Sub
Определение того, открыт ли документ
Чтобы определить, открыт ли документ, можно перечислить коллекцию Documents с помощью параметра For Each. .. Следующая инструкция. В следующем примере документ с именем Sample.doc активируется, если документ открыт, или открывается Sample.doc, если он в настоящее время не открыт.
Sub ActivateOrOpenDocument() Dim doc As Document Dim docFound As Boolean For Each doc In Documents If InStr(1, doc.Name, "sample.doc", 1) Then doc.Activate docFound = True Exit For Else docFound = False End If Next doc If docFound = False Then Documents.Open FileName:="Sample.doc" End Sub
Ссылка на активный документ
Вместо ссылки на документ по имени или по номеру индекса, например, Documents("Sales.doc")
свойство ActiveDocument возвращает объект Document , ссылающийся на активный документ (документ с фокусом). В следующем примере отображается имя активного документа или, если документы не открыты, отображается сообщение.
Sub ActiveDocumentName() If Documents. Count >= 1 Then MsgBox ActiveDocument.Name Else MsgBox "No documents are open" End If End Sub
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Макрос VBA, использующий данные из Word и Excel для отправки сообщений — Outlook
Twitter
LinkedIn
Facebook
Адрес электронной почты
-
Статья -
-
-
- Применяется к:
- Outlook
Аннотация
В этой статье описывается Visual Basic для приложений, который использует данные из документа Microsoft Word и книги Microsoft Excel для отправки сообщений из Microsoft Outlook.
Важно!
Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Специалисты технической поддержки Майкрософт могут пояснить работу той или иной процедуры, но модификация примеров и их адаптация к задачам разработчика не предусмотрена.
В следующем примере предполагается, что на листе есть два определенных имени:
- Первое определенное имя subjectcell ссылается на ячейку, содержащую строку темы сообщения (например, «Это тестовое сообщение»).
- Второе определенное имя, tolist, ссылается на первую ячейку горизонтального списка, содержащую список получателей (например, «John Doe», «Jane Doe» и т. д.).
У вас также должен быть документ Microsoft Word. Текст этого документа используется макросом в качестве текста сообщения электронной почты.
Sub SendOutlookMessages()'Dimension variables. Dim OL As Object, MailSendItem As Object Dim W As Object Dim MsgTxt As String, SendFile As String Dim ToRangeCounter As Variant 'Identifies Word file to send SendFile = Application.GetOpenFilename(Title:="Select MS Word " & _ "file to mail, then click 'Open'", buttontext:="Send", _ MultiSelect:=False)'Starts Word session Set W = GetObject(SendFile)'Pulls text from file for message body MsgTxt = W.Range(Start:=W.Paragraphs(1).Range.Start, _ End:=W.Paragraphs(W.Paragraphs.Count).Range.End)'Ends Word session Set W = Nothing 'Starts Outlook session Set OL = CreateObject("Outlook.Application") Set MailSendItem = OL.CreateItem(olMailItem) ToRangeCounter = 0 'Identifies number of recipients for To list. For Each xCell In ActiveSheet.Range(Range("tolist"), _ Range("tolist").End(xlToRight)) ToRangeCounter = ToRangeCounter + 1 Next xCell If ToRangeCounter = 256 Then ToRangeCounter = 1 'Creates message With MailSendItem .Subject = ActiveSheet.Range("subjectcell").Text .Body = MsgTxt 'Creates "To" list For Each xRecipient In Range("tolist").Resize(1, ToRangeCounter) RecipientList = RecipientList & ";" & xRecipient Next xRecipient .To = RecipientList .Send End With 'Ends Outlook session Set OL = Nothing End Sub
Как скопировать данные/содержимое из Word в Excel с помощью VBA
Предположим, у меня есть файл из слов с несколькими абзацами. Я хочу скопировать содержимое как есть, с именем шрифта, размером, подчеркиванием, цветом, полужирным шрифтом и т. д. из файла Word и записать его на моем листе Excel. Звучит интересно? Я покажу вам, как сделать это одним нажатием кнопки с помощью простого макроса в VBA.
Что будет делать этот макрос?
Я написал эту программу для своей жены. ей учитель . Она спросила меня, есть ли простой способ скопировать и вставить содержимое из файла Word в Excel ( как ). Поскольку это повторяющаяся работа, я сказал, что мы можем автоматизировать процесс с помощью VBA. Однако просто убедитесь, что содержимое в текстовом файле написано правильно, то есть пробелы, следующая строка (возврат каретки) и т. д. выполнены правильно.
Кроме того, макрос будет читать каждый текст в текстовом файле как есть, с именем шрифта , цветом текста, размером шрифта, он проверит, подчеркнут ли текст или если жирный и т.д.
Смотрите это изображение. 👇
Вот что я делаю!
В этом примере у меня есть кнопка, элемент управления ActiveX на моем листе (лист 1). При нажатии на кнопку откроется диалоговое окно выбора файлов, в котором вы сможете выбрать нужный файл Word.
После того, как вы выбрали файл Word, макрос откроет документ, прочитает и извлечет данные (содержимое) из файла и запишет их на лист Excel.
Примечание : Средство выбора файла или диалоговое окно файла являются необязательными. Вы можете указать имя файла и путь к переменной.
Добавить ссылку
Нажмите Alt+F11, чтобы открыть редактор VBA. Вы также можете щелкнуть правой кнопкой мыши на листе 1 и выбрать опцию «Просмотреть код». Добавьте ссылку на библиотеку объектов Office в свое приложение. Смотрите изображение.
Код VBA или макрос
Опция явная Частная подпрограмма CommandButton1_Click() Extract_word_data Конец сабвуфера Общедоступная подпрограмма extract_word_data() При ошибке Возобновить Далее ' Создайте объект «FileDialog» в качестве диалогового окна выбора файлов. Dim fd как Office. FileDialog Установите fd = Application.FileDialog (msoFileDialogFilePicker) Dim sfileName как строка с фд .AllowMultiSelect = Ложь .Фильтры.Очистить .Title = "Выберите файл Word" .Фильтры.Добавить "Все документы Word", "*.doc?", 1 Если .Показать = Истина Тогда sfileName = Dir(.SelectedItems(1)) ' Получить файл. Конец, если Конец с Application.ScreenUpdating = Ложь Application.DisplayAlerts = Ложь Если Обрезать(sfileName) "" Тогда Dim oWord As Object ' Создать объект Word. Установите oWord = CreateObject("Word.Application") oWord.Visible = False ' Не показывать файл Word. 'СОЗДАТЬ ОБЪЕКТ ДОКУМЕНТА. Дим оДок Установить oDoc = oWord.Documents.Open(fd.InitialFileName & sfileName) Dim sPara() как строка sPara = Split(oDoc.range, vbCr) ' разделить возврат каретки и сохранить в переменной. Dim iParaCount, iCnt1, iRow As Integer ' Только счетчики. iряд = 1 Dim txt как строка Для iParaCount = 0 для UBound (sPara) Dim str() как строка str = Split(sPara(iParaCount), " ") ' разделить пробелы и сохранить в переменной. Для iCnt1 = 0 To UBound(str) txt = Заменить (str (iCnt1), "", "") Sheet1.Cells(iRow, iCnt1 + 1) = txt ' Запись данных. Если (Обрезать(txt "")) Тогда ' получить свойства текста, такие как размер шрифта, имя шрифта, цвет и подчеркивание (если есть) 'и назначьте его тексту на рабочем листе. С oDoc.range.Paragraphs(iRow).range.Words(iCnt1 + 1) Sheet1.Cells(iRow, iCnt1 + 1).Font.Size = .Font.Size Sheet1.Cells(iRow, iCnt1 + 1).Font.Name = .Font.Name Sheet1.Cells(iRow, iCnt1 + 1). Font.Color = .Font.Color Если (.Шрифт.Полужирный) Тогда Sheet1.Cells(iRow, iCnt1 + 1).Font.Bold = .Font.Bold Конец, если If (.Font.Underline) Then ', если текст подчеркнут. Sheet1.Cells(iRow, iCnt1 + 1).Font.Underline = xlUnderlineStyleSingle Конец, если Конец с Конец, если DoEvents Следующий iCnt1 iряд = iряд + 1 Следующий iParaCount Конец, если Application.ScreenUpdating = Истина Application.DisplayAlerts = Истина ' Очистить. oWord.Закрыть oWord.Выход oDoc.Выйти Установить oWord = ничего Установить oDoc = Ничего Конец суб
Примечание : Средство выбора файла или диалоговое окно файла являются необязательными. Вы можете указать имя файла и путь к переменной sfileName.
Приведенный выше код содержит комментарии, которые помогут вам понять функции.
Макрос имеет некоторые ограничения , конечно. Например, он может неправильно переводить пробелы табуляции, то есть если вы использовали табуляцию несколько раз для сдвига определенной строки слева направо и т. д. Однако он будет читать пробелы и возврат каретки (для следующей строки) вдоль с названием шрифта, размером, цветом текста, подчеркиванием и т. д.
Скопировать данные таблицы из файла Word в рабочий лист Excel (как есть)
Теперь файл Word или документ могут содержать таблицы (несколько таблиц). Вы можете прочитать эти таблицы, используя простой макрос. Вот пример.
Вы можете протестировать приведенный выше код, используя большие файлы Word, содержащие множество абзацев, таблиц и других объектов.
Спасибо за внимание. ☺
← ПредыдущийСледующий →
VBA Копировать данные файла Word в Excel
ранджит3523
Доска Обычная
#1
Здравствуйте, эксперты,
Да, я понимаю, что у нас есть несколько тем с одной и той же темой. Прежде чем опубликовать этот вопрос, я просмотрел большую часть темы, но не получил ожидаемого решения.
Я использую Office 365, и я только что попробовал приведенный ниже код, и либо он работает в течение длительного времени, либо выдает ошибку в «objWord.Selection.WholeStory».
В основном я ожидаю, что просто скопирую весь текстовый файл (ВКЛЮЧАЯ ЗАГОЛОВОК) и вставлю его на определенную вкладку. (Как мы вручную делаем это из Word в Excel)
Я был бы очень полезен для меня, если бы кто-нибудь помог мне в этом.
Код VBA:
Sub ImportSectHWord() Dim objWord как объект Dim objDoc как объект Дим вдфиленаме Установите objWord = CreateObject("word.Application") wdFileName = Application. GetOpenFilename("Документы Word, *.doc*") Если wdFileName = False, тогда выйдите из Sub Установить objDoc = GetObject(wdFileName) objWord.Documents.Open (вдфиленаме) objWord.Selection.WholeStory Выбор.Копировать Thisworkbook.sheets("Word").Range("A1").Выберите ActiveSheet.Paste objDoc.Close SaveChanges:=wdDoNotSaveChanges objWord.Выход Конец суб
С уважением,
Ранджит
Создание сводной таблицы на карте
Нажмите здесь, чтобы открыть ответ
Если в ваших данных есть почтовые индексы, почтовые индексы или названия городов, выберите данные и используйте Вставка, 3D-карта. (Находится справа от значков диаграммы).
Сортировать по дате
Сортировать по голосам
ДантеАмор
Известный член
#2
Попробуйте это:
Код VBA:
Sub ImportSectHWord() Dim WordApp как объект Dim objDoc как объект Dim wdFileName как вариант wdFileName = Application.GetOpenFilename("Документы Word, *.doc*") Если wdFileName = False, тогда выйдите из Sub Установите WordApp = CreateObject("Word.Application") Установите objDoc = WordApp.Documents.Open(wdFileName) WordApp.Selection.WholeStory WordApp.Selection.Copy ThisWorkbook.Sheets("Word").Range("A1").Select ActiveSheet.Paste objDoc.Close Ложь WordApp.Выход Установить WordApp = Ничего Установите objDoc = Ничего Конец суб
Голосовать за
0
ранджит3523
Обычная доска
#3
ДантеАмор сказал:
Попробуйте это:
Код VBA:
Sub ImportSectHWord() Dim WordApp как объект Dim objDoc как объект Dim wdFileName как вариант wdFileName = Application.GetOpenFilename("Документы Word, *.doc*") Если wdFileName = False, тогда выйдите из Sub Установите WordApp = CreateObject("Word.Application") Установите objDoc = WordApp.Documents.Open(wdFileName) WordApp.Selection.WholeStory WordApp.Selection.Copy ThisWorkbook.Sheets("Word").Range("A1").Select ActiveSheet.Paste objDoc.Close Ложь WordApp.Выход Установить WordApp = Ничего Установите objDoc = Ничего Конец субНажмите, чтобы развернуть…
Спасибо ДантеАмор!!!
Да, кодирование это копирование всего содержимого из рабочего документа и вставка во вкладку «Word». На снимке экрана ниже ваша кодировка копирует данные из (пожалуйста, смотрите…
Но меня беспокоит то, что кодировка также должна копировать данные заголовка. Можно ли скопировать и перенести данные заголовка в Вкладка Excel Word?Посоветуйте пожалуйста!!!
Голосовать за
0
ранджит3523
Обычная доска
#4
ranjith3523 сказал:
Спасибо ДантеАмор!!!
Да, кодирование это копирование всего содержимого из рабочего документа и вставка во вкладку «Word». На снимке экрана ниже ваша кодировка копирует данные из (Пожалуйста, смотрите. ..
Но меня беспокоит то, что кодирование должно также копировать данные заголовка. Можно ли скопировать и перенести данные заголовка на вкладку Excel Word? Пожалуйста, сообщите !!!
Просмотр приложение 40302
Нажмите, чтобы развернуть…
Я попытался добавить приведенный ниже код в ваш макрос, чтобы просто скопировать заголовок с первой страницы файла Word и вставить его на вкладку «Word» в ячейке K1. На самом деле, я хочу скопировать заголовок только с первой страницы файла Word и вставить его в ячейку K1 на вкладке «Word».
Код VBA:
Dim docSource As Document Установите docSource = wdFileName docSource.Sections(i).Headers(j).Range.Copy ThisWorkbook.Sheets("Word").Range("K1").PasteSpecial (xlValues)
Голосовать за
0
ДантеАмор
Известный член
#5
РЕКЛАМА
Верхние и нижние колонтитулы немного сложно читать. Проверьте следующий код, чтобы получить к ним доступ.
Голосовать за
0
Макропод
Модератор в отставке
#6
В зависимости от того, чего вы пытаетесь достичь, вы также можете рассмотреть возможность встраивания документа в книгу.
Голосовать за
0
ДантеАмор
Известный член
#7
РЕКЛАМА
ranjith3523 сказал:
Я хочу скопировать заголовок только с первой страницы файла Word и вставить его в ячейку K1
Нажмите, чтобы развернуть…
Попробуйте это:
Rich (код BB):
Sub ImportSectHWord() Dim WordApp как объект, objDoc как объект Dim wdFileName как вариант wdFileName = Application.GetOpenFilename("Документы Word, *.doc*") Если wdFileName = False, тогда выйдите из Sub Установите WordApp = CreateObject("Word.Application") Установите objDoc = WordApp.Documents.Open(wdFileName) WordApp.Visible = Истина WordApp.Selection.WholeStory WordApp.Selection.Copy ThisWorkbook.Sheets("Word").Range("A1"). PasteSpecial xlPasteValues WordApp.ActiveDocument.Sections(1).Headers(1).Range.Copy ThisWorkbook.Sheets("Word").Range("K1").PasteSpecial xlPasteValues objDoc.Close Ложь WordApp.Выход Установить WordApp = Ничего Установите objDoc = Ничего Конец суб
Голосовать за
0
ранджит3523
Обычная доска
#8
Д
ДантеАмор сказал:
Попробуйте это:
Rich (код BB):
Sub ImportSectHWord() Dim WordApp как объект, objDoc как объект Dim wdFileName как вариант wdFileName = Application. GetOpenFilename("Документы Word, *.doc*") Если wdFileName = False, тогда выйдите из Sub Установите WordApp = CreateObject("Word.Application") Установите objDoc = WordApp.Documents.Open(wdFileName) WordApp.Visible = Истина WordApp.Selection.WholeStory WordApp.Selection.Copy ThisWorkbook.Sheets("Word").Range("A1").PasteSpecial xlPasteValues WordApp.ActiveDocument.Sections(1).Headers(1).Range.Copy ThisWorkbook.Sheets("Word").Range("K1").PasteSpecial xlPasteValues objDoc.Close Ложь WordApp.Выход Установить WordApp = Ничего Установите objDoc = Ничего Конец субНажмите, чтобы развернуть…
Да, это то, что я ожидал. Большое спасибо за вашу своевременную помощь
Голосовать за
0
ДантеАмор
Известный член
#9
Я рад помочь вам. Спасибо за ответ.
Голосовать за
0
Вы должны войти или зарегистрироваться, чтобы ответить здесь.
Код VBA для изменения Word на альбомную
- norman8823
- Вопросы Excel
- Ответы
- 1
- просмотров
- 129
NdNoviceHlp
VBA для объединения всех файлов в папке не в правильном порядке.
- Акбаров
- Вопросы Excel
- Ответы
- 2
- просмотров
- 121
Акбаров
мой файл не сохраняется на сервере
- jforce
- Вопросы Excel
- Ответы
- 1
- просмотров
- 157
rollis13
Word Doc в Excel
- charlee63