Имеется файлик 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]
Имеется файлик 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