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

Вход

Регистрация

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

 

= Мир MS Excel/Объединение данных из нескольких файлов Word в Excel - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Объединение данных из нескольких файлов Word в Excel
Мурад Дата: Вторник, 08.11.2016, 10:36 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Всем доброго времени суток!
Один замечательный программист на этом форуме написал прекрасный макрос для объединения нескольких книг и листов в один файл. Макрос называется "Consolidated_Range_of_Books_and_Sheets".
А вот как сделать то же самое для нескольких файлов Word? Перекинуть данные из этих файлов в один файл Excel, друг под другом.
Прикладываю 2 файла для примера.
К сообщению приложен файл: _2-6.doc (62.5 Kb) · _2-6.docx (39.8 Kb)
 
Ответить
СообщениеВсем доброго времени суток!
Один замечательный программист на этом форуме написал прекрасный макрос для объединения нескольких книг и листов в один файл. Макрос называется "Consolidated_Range_of_Books_and_Sheets".
А вот как сделать то же самое для нескольких файлов Word? Перекинуть данные из этих файлов в один файл Excel, друг под другом.
Прикладываю 2 файла для примера.

Автор - Мурад
Дата добавления - 08.11.2016 в 10:36
Мурад Дата: Вторник, 08.11.2016, 11:06 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Вот нашел макрос Hugo:
[vba]
Код
Sub Макрос1()
    Dim flag As Boolean
    Dim WordApp As Object
    On Error Resume Next
    Set WordApp = GetObject(, "word.application")
    If WordApp Is Nothing Then Set WordApp = CreateObject("word.application"): flag = True
    On Error GoTo 0
    With WordApp
        With .Documents.Open("c:\test.doc")
            .tables(1).Range.Copy
            ActiveSheet.Paste
            .Close False
        End With
    End With
    If flag Then WordApp.Quit
    Set WordApp = Nothing
End Sub
[/vba]
из темы макрос Hugo. Посмотрим, подходит ли для выгрузки данных из нескольких файлов
 
Ответить
СообщениеВот нашел макрос Hugo:
[vba]
Код
Sub Макрос1()
    Dim flag As Boolean
    Dim WordApp As Object
    On Error Resume Next
    Set WordApp = GetObject(, "word.application")
    If WordApp Is Nothing Then Set WordApp = CreateObject("word.application"): flag = True
    On Error GoTo 0
    With WordApp
        With .Documents.Open("c:\test.doc")
            .tables(1).Range.Copy
            ActiveSheet.Paste
            .Close False
        End With
    End With
    If flag Then WordApp.Quit
    Set WordApp = Nothing
End Sub
[/vba]
из темы макрос Hugo. Посмотрим, подходит ли для выгрузки данных из нескольких файлов

Автор - Мурад
Дата добавления - 08.11.2016 в 11:06
Мурад Дата: Вторник, 08.11.2016, 11:19 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Не подошло. Руки надо ровнять дальше. А пока дальше воспользуемся тем, что уже придумали. Следующий Макрос от Gustav:
[vba]
Код
Sub ImportWordTable()
Dim wdDoc As Object
Dim wdFileName As Variant
Dim TableNo As Integer 'table number in Word
Dim iRow As Long 'row index in Excel
Dim iCol As Integer 'column index in Excel

wdFileName = Application.GetOpenFilename("Word files (*.doc),*.doc", , _
"Browse for file containing table to be imported")

If wdFileName = False Then Exit Sub '(user cancelled import file browser)

Set wdDoc = GetObject(wdFileName) 'open Word file

With wdDoc
TableNo = wdDoc.tables.Count
If TableNo = 0 Then
MsgBox "This document contains no tables", _
vbExclamation, "Import Word Table"
ElseIf TableNo > 1 Then
TableNo = InputBox("This Word document contains " & TableNo & " tables." & vbCrLf & _
"Enter table number of table to import", "Import Word Table", "1")
End If
With .tables(TableNo)
'copy cell contents from Word table cells to Excel cells
For iRow = 1 To .Rows.Count
For iCol = 1 To .Columns.Count
    Cells(iRow, iCol) = WorksheetFunction.Trim( _
                        WorksheetFunction.Clean( _
                        Replace( _
                        Replace( _
                        Replace( _
                        .cell(iRow, iCol).Range.Text _
                        , vbLf, " ") _
                        , vbCr, " ") _
                        , vbTab, " ") _
                        ))
Next iCol
Next iRow
End With
End With

Set wdDoc = Nothing

End Sub
[/vba]

Макрос работает только с 1 файлом Ворд, и после выбора файла из примера "Азов 2-6" выдает ошибку 5941 "Запрашиваемый номер семейства не существует"
 
Ответить
СообщениеНе подошло. Руки надо ровнять дальше. А пока дальше воспользуемся тем, что уже придумали. Следующий Макрос от Gustav:
[vba]
Код
Sub ImportWordTable()
Dim wdDoc As Object
Dim wdFileName As Variant
Dim TableNo As Integer 'table number in Word
Dim iRow As Long 'row index in Excel
Dim iCol As Integer 'column index in Excel

wdFileName = Application.GetOpenFilename("Word files (*.doc),*.doc", , _
"Browse for file containing table to be imported")

If wdFileName = False Then Exit Sub '(user cancelled import file browser)

Set wdDoc = GetObject(wdFileName) 'open Word file

With wdDoc
TableNo = wdDoc.tables.Count
If TableNo = 0 Then
MsgBox "This document contains no tables", _
vbExclamation, "Import Word Table"
ElseIf TableNo > 1 Then
TableNo = InputBox("This Word document contains " & TableNo & " tables." & vbCrLf & _
"Enter table number of table to import", "Import Word Table", "1")
End If
With .tables(TableNo)
'copy cell contents from Word table cells to Excel cells
For iRow = 1 To .Rows.Count
For iCol = 1 To .Columns.Count
    Cells(iRow, iCol) = WorksheetFunction.Trim( _
                        WorksheetFunction.Clean( _
                        Replace( _
                        Replace( _
                        Replace( _
                        .cell(iRow, iCol).Range.Text _
                        , vbLf, " ") _
                        , vbCr, " ") _
                        , vbTab, " ") _
                        ))
Next iCol
Next iRow
End With
End With

Set wdDoc = Nothing

End Sub
[/vba]

Макрос работает только с 1 файлом Ворд, и после выбора файла из примера "Азов 2-6" выдает ошибку 5941 "Запрашиваемый номер семейства не существует"

Автор - Мурад
Дата добавления - 08.11.2016 в 11:19
Мурад Дата: Вторник, 08.11.2016, 11:24 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
О, тему перенесли сюда... Так макрос откуда запускать? Из Visual Basic Ворда или Экселя?))) Вроде это вопрос по VBA был. Ну да ладно
 
Ответить
СообщениеО, тему перенесли сюда... Так макрос откуда запускать? Из Visual Basic Ворда или Экселя?))) Вроде это вопрос по VBA был. Ну да ладно

Автор - Мурад
Дата добавления - 08.11.2016 в 11:24
Мурад Дата: Вторник, 08.11.2016, 12:32 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Вот! Нашел недостающую часть макроса, который работает с одним файлом и переносит данные из него в Excel:
[vba]
Код
Sub CopyOldWordDoc()
Dim a As Variant, MainBook As Workbook, CurrentSheet As String
Set MainBook = ActiveWorkbook
CurrentSheet = ActiveSheet.Name
Dim FD As FileDialog
Dim iFileName As String
Dim Book As Workbook
Dim CheckNameBook As String
Set FD = Application.FileDialog(msoFileDialogFilePicker)
With FD
.Filters.Clear
.Filters.Add "Microsoft Word files", "*.doc"
.Filters.Add "All files", "*.*"
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path
.Title = "Открытие документа"
.ButtonName = "Открыть"
If .Show = False Then
MsgBox "Вы не указали файл - источник!", 48, "Ошибка"
Exit Sub
Else
iFileName = .SelectedItems(1)
End If
End With
Set FD = Nothing
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>­>
' Открытие документа Word и копирование содержимого в новую книгу
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>­>
Dim WordApp As Object, CopyArea As Variant
Set WordApp = CreateObject("Word.Application")
WordApp.Application.Visible = False
WordApp.Documents.Open Filename:=iFileName
With WordApp.ActiveDocument
Set CopyArea = .Range(0, .Characters.Count)
CopyArea.Select
WordApp.Selection.Copy
End With
Workbooks.Add
Dim TempBook As Workbook
Set TempBook = ActiveWorkbook
'TempBook.Worksheets(1).Cells.NumberFormat = "@"
TempBook.Worksheets(1).Range("A1").Select
ActiveSheet.Paste
'Application.CutCopyMove = False
WordApp.Quit
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>­>
' Поиск данных в новой книге и копирование их в форму
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>­>

MainBook.Activate
Worksheets(CurrentSheet).Activate
Range("A1").Activate
End Sub
[/vba]
 
Ответить
СообщениеВот! Нашел недостающую часть макроса, который работает с одним файлом и переносит данные из него в Excel:
[vba]
Код
Sub CopyOldWordDoc()
Dim a As Variant, MainBook As Workbook, CurrentSheet As String
Set MainBook = ActiveWorkbook
CurrentSheet = ActiveSheet.Name
Dim FD As FileDialog
Dim iFileName As String
Dim Book As Workbook
Dim CheckNameBook As String
Set FD = Application.FileDialog(msoFileDialogFilePicker)
With FD
.Filters.Clear
.Filters.Add "Microsoft Word files", "*.doc"
.Filters.Add "All files", "*.*"
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path
.Title = "Открытие документа"
.ButtonName = "Открыть"
If .Show = False Then
MsgBox "Вы не указали файл - источник!", 48, "Ошибка"
Exit Sub
Else
iFileName = .SelectedItems(1)
End If
End With
Set FD = Nothing
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>­>
' Открытие документа Word и копирование содержимого в новую книгу
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>­>
Dim WordApp As Object, CopyArea As Variant
Set WordApp = CreateObject("Word.Application")
WordApp.Application.Visible = False
WordApp.Documents.Open Filename:=iFileName
With WordApp.ActiveDocument
Set CopyArea = .Range(0, .Characters.Count)
CopyArea.Select
WordApp.Selection.Copy
End With
Workbooks.Add
Dim TempBook As Workbook
Set TempBook = ActiveWorkbook
'TempBook.Worksheets(1).Cells.NumberFormat = "@"
TempBook.Worksheets(1).Range("A1").Select
ActiveSheet.Paste
'Application.CutCopyMove = False
WordApp.Quit
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>­>
' Поиск данных в новой книге и копирование их в форму
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>­>

MainBook.Activate
Worksheets(CurrentSheet).Activate
Range("A1").Activate
End Sub
[/vba]

Автор - Мурад
Дата добавления - 08.11.2016 в 12:32
Мурад Дата: Вторник, 08.11.2016, 12:37 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Осталось добавить возможность выбора нескольких файлов Ворд, создания из них коллекции, запуска цикла и в цикле прописать код из верхнего макроса
 
Ответить
СообщениеОсталось добавить возможность выбора нескольких файлов Ворд, создания из них коллекции, запуска цикла и в цикле прописать код из верхнего макроса

Автор - Мурад
Дата добавления - 08.11.2016 в 12:37
Gustav Дата: Вторник, 08.11.2016, 23:38 | Сообщение № 7
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Что это за "театр одного актера"? И на меня напраслину почём зря не возводИте: макрос тот я не писал, только прокомментировал один оператор. И совершенно по другому поводу. Так что коллега по ходу рамсы попутал. В натуре!


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеЧто это за "театр одного актера"? И на меня напраслину почём зря не возводИте: макрос тот я не писал, только прокомментировал один оператор. И совершенно по другому поводу. Так что коллега по ходу рамсы попутал. В натуре!

Автор - Gustav
Дата добавления - 08.11.2016 в 23:38
Мурад Дата: Среда, 09.11.2016, 10:46 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Gustav, извиняюсь конечно. Я сослался на вас, потому что увидел ваше сообщение с этим кодом. Я пытаюсь обобщить все беседы, имевшие отношение к выгрузке данных из Ворд в Эксель. Вот в этой теме вы предложили решение, являющимся, на мой взгляд, сердцем макроса. Более того, автор того топа поблагодарил вас, указав, что ваш код "то, что нужно для импорта таблиц из Word".
Насчет театра одного актера, я пытался привлечь к дискуссии других ребят, которые направили бы меня в правильное русло. Или здесь не форум?
 
Ответить
СообщениеGustav, извиняюсь конечно. Я сослался на вас, потому что увидел ваше сообщение с этим кодом. Я пытаюсь обобщить все беседы, имевшие отношение к выгрузке данных из Ворд в Эксель. Вот в этой теме вы предложили решение, являющимся, на мой взгляд, сердцем макроса. Более того, автор того топа поблагодарил вас, указав, что ваш код "то, что нужно для импорта таблиц из Word".
Насчет театра одного актера, я пытался привлечь к дискуссии других ребят, которые направили бы меня в правильное русло. Или здесь не форум?

Автор - Мурад
Дата добавления - 09.11.2016 в 10:46
  • Страница 1 из 1
  • 1
Поиск:

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