Из 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
Доска Обычная