VBA Макросы: Импорт таблицы из word в excel.

Автор Cdelphi, 29 мая 2014, 10:56

Cdelphi

Как сделать автоматическое копирование таблицы из Word в Excel?
Макрос будет запускаться из Excel.

Администратор

Такой результат Вам подходит (см. вложенные файлы)?
Я это сделал следующим образом без макросов:

  • выделил таблицу в Word-файле;
  • скопировал выделенную таблицу;
  • перешёл на Excel-лист;
  • выделил ячейку A1 и вставил скопированное.
Такой результат Вас устраивает? Если устраивает, то я попробую сделать эти действия с помощью макроса.

[вложение удалено администратором]

Cdelphi

Да было бы хорошо, если можно вставлять в ячейку z6, и код для разных таблиц.

Администратор

Макрос (см. ниже) копирует первую таблицу из Word-файла в активный лист, в выделенную ячейку.

Макрос
Sub Procedure_1()
   
    'В константе "strDocFullName" нужно указать полное имя Word-документа,
        'из которого нужно скопировать таблицу.
    Const strDocFullName As String = "C:\Users\User\Desktop\Из.docx"
   
    'Для написания макроса, удобно подключить библиотеку для работы
        'с программой "Word". Затем можно будет отключить эту библиотеку:
    'Tools - References... - Microsoft Word версия Object Library.
    Dim myWord As Word.Application
    Dim docSource As Word.Document
   
   
    'Запуск и VBA-наименование программы "Word".
        'Даём программе "Word" VBA-имя "myWord" и через
        'это имя будем работать с программой Word в макросе.
    Set myWord = CreateObject(Class:="Word.Application")
   
    'Делаем программу Word видимой, чтобы было удобно писать код.
    myWord.Visible = True
   
    'Открытие и VBA-наименование Word-файла.
    Set docSource = myWord.Documents.Open(Filename:=strDocFullName)
   
    'Копирование первой таблицы в Word-файле.
    'Range - это фрагмент Word-файла, где находится таблица.
    docSource.Tables(1).Range.Copy
   
    'Выделение ячейки, куда будут вставлены данные.
        'Для вставки в Excel будет использоваться метод "PasteSpecial",
        'который относится к объекту "Worksheet". Метод "PasteSpectial"
        'ещё есть у объекта "Range". У объекта "Worksheet" нельзя
        'указать ячейку, куда надо вставить, поэтому нужно заранее
        'выделить нужную ячейку, куда будут вставлены данные.
    ActiveSheet.Range("A1").Select
   
    'Вставка скопированной таблицы в активный Excel-лист в выделенную ячейку.
    'Код записал с помощью макрорекордера, делая такие действия в "Excel 2010":
        'вкладка "Главная" - группа "Буфер обмена" - "Вставить (со стрелкой)" -
        '"Специальная вставка..." - кружок "Вставить" - "HTML".
    ActiveSheet.PasteSpecial Format:="HTML", Link:=False
   
    'Чтобы в буфере обмена не было много данных, очищаем буфер обмена,
        'копируя в него только одну ячейку.
    docSource.Tables(1).Cell(1, 1).Range.Copy
   
    'Закрытие Word-документа.
    '0 - без сохранения.
    docSource.Close SaveChanges:=0
   
    'Закрытие программы "Word".
    myWord.Quit SaveChanges:=0
   
End Sub
[свернуть]

Cdelphi

больше спасибо, макрос работает