Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Копирование из Word в Excel - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK  
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Word » Копирование из Word в Excel (Макросы/Sub)
Копирование из Word в Excel
matigovas Дата: Суббота, 23.12.2017, 13:25 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Имеется файлик Word с таблицами, данные из которых используются для расчетов в Excel. Решение, которое сейчас используется - ручное открытие Word копирование, вставка в нужный лист Excel, но честно говоря надоело так делать, потому что люди косячат при копировании и порой приходится переделывать очень много, хочу сделать через макрос по нажатию кнопки. Имеются так сказать "обрывки" кода (они чуть ниже), совместить не хватает мозгов, надеюсь на вашу помощь
Как я вижу реализацию:
1) Макрос запускает окно с предложением открыть нужный документ Word
2) копирует всё его содержимое
3) активирует нужный лист Excel и вставляет содержимое в него
4) очищает буфер и закрывает Word без сохранения

Вот обрывки кода
на открытие:
[vba]
Код
' открываем нужный файл
Dim myName As String, wB As Workbook
        With Application.FileDialog(msoFileDialogFilePicker)
            .Title = "Выберите 451 форму"
            .Show
                If .SelectedItems.Count = 0 Then Exit Sub
            myName = .SelectedItems(1)
        End With
    Application.ScreenUpdating = False
    Workbooks.Open Filename:=myName: Set wB = Workbooks(ActiveWorkbook.Name)
' переходим к копированию файла в лист 1
    Windows(wB.Name).Activate: ActiveSheet.Unprotect
    Range("A1:Y750").Select
    Selection.Copy
    Windows("Поиск совпадений.xlsm").Activate
    Sheets("Лист1").Select
    Cells.Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
    Windows(wB.Name).Activate
[/vba]

код для ворда

[vba]
Код
   'В константе "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
[/vba]


Сообщение отредактировал matigovas - Суббота, 23.12.2017, 13:28
 
Ответить
СообщениеИмеется файлик Word с таблицами, данные из которых используются для расчетов в Excel. Решение, которое сейчас используется - ручное открытие Word копирование, вставка в нужный лист Excel, но честно говоря надоело так делать, потому что люди косячат при копировании и порой приходится переделывать очень много, хочу сделать через макрос по нажатию кнопки. Имеются так сказать "обрывки" кода (они чуть ниже), совместить не хватает мозгов, надеюсь на вашу помощь
Как я вижу реализацию:
1) Макрос запускает окно с предложением открыть нужный документ Word
2) копирует всё его содержимое
3) активирует нужный лист Excel и вставляет содержимое в него
4) очищает буфер и закрывает Word без сохранения

Вот обрывки кода
на открытие:
[vba]
Код
' открываем нужный файл
Dim myName As String, wB As Workbook
        With Application.FileDialog(msoFileDialogFilePicker)
            .Title = "Выберите 451 форму"
            .Show
                If .SelectedItems.Count = 0 Then Exit Sub
            myName = .SelectedItems(1)
        End With
    Application.ScreenUpdating = False
    Workbooks.Open Filename:=myName: Set wB = Workbooks(ActiveWorkbook.Name)
' переходим к копированию файла в лист 1
    Windows(wB.Name).Activate: ActiveSheet.Unprotect
    Range("A1:Y750").Select
    Selection.Copy
    Windows("Поиск совпадений.xlsm").Activate
    Sheets("Лист1").Select
    Cells.Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
    Windows(wB.Name).Activate
[/vba]

код для ворда

[vba]
Код
   'В константе "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
[/vba]

Автор - matigovas
Дата добавления - 23.12.2017 в 13:25
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Word » Копирование из Word в Excel (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2018 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!