0 / 0 / 0 Регистрация: 22.11.2013 Сообщений: 108 |
|
1 |
|
14.06.2016, 11:30. Показов 11205. Ответов 5
Доброго дня. появилась такая проблемка: есть электронная заявка(таблица в Excel) и есть вордовский документ который мы получаем от клиента.в вордовском документе таблица с такими же столбцами как и в электронной заявке. так вот в чем проблема, как мне привязаться из экселя к ворду? что бы можно было перенести данные из ворда в эксель. использовать ctrl+с и ctrl+v не рекомендуется, т.к. хотел бы сделать перенос через кнопку на форме. вордовский файлик всегда будет лежать в одном месте.
0 |
KoGG 5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
||||
14.06.2016, 11:56 |
2 |
|||
Сообщение было отмечено Памирыч как решение Решение
1 |
0 / 0 / 0 Регистрация: 22.11.2013 Сообщений: 108 |
|
14.06.2016, 13:16 [ТС] |
3 |
очень круто) а можно что бы данные начинали вводиться с 23 строки?)
0 |
KoGG 5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
||||
14.06.2016, 13:37 |
4 |
|||
Можно
1 |
Ispada 0 / 0 / 0 Регистрация: 22.11.2013 Сообщений: 108 |
||||
17.06.2016, 10:35 [ТС] |
5 |
|||
DocFullName = «C:Temp2Doc1.docx» здесь мы указываем непосредственно путь к файл. может подскажете, как сделать, что бы мы могли выбирать этот файл сами? т.е. открывалось окно выбора файла, мы там его выбирали, ну и дальше всё как есть) Добавлено через 45 минут
и вроде бы нормально работает)
0 |
KoGG 5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
||||
17.06.2016, 10:40 |
6 |
|||
Сообщение было отмечено Памирыч как решение Решение
0 |
Dedmoroz86 Пользователь Сообщений: 6 |
Друзья, помогите. Необходимо сделать следующее: Прикрепленные файлы
|
Grr Пользователь Сообщений: 595 |
#2 05.10.2016 05:23:55 Одна табличка 3х3
Изменено: Grr — 05.10.2016 10:18:41 |
|
JeyCi Пользователь Сообщений: 3357 |
#3 05.10.2016 07:22:29 4 таблицы
Прикрепленные файлы
Изменено: JeyCi — 05.10.2016 07:34:45 чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах) |
||
Grr Пользователь Сообщений: 595 |
JeyCi, никакого пространства для самодеятельности не оставили |
JeyCi Пользователь Сообщений: 3357 |
#5 05.10.2016 07:34:29
названия таблиц из word’а выковыривать не буду — оставляю для самодеятельности чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах) |
||
Dedmoroz86 Пользователь Сообщений: 6 |
Огромное спасибо!!!! Помогло! =)))))) |
Dedmoroz86 Пользователь Сообщений: 6 |
Один вопрос остался, все цифры не поддаются математическим расчетам, в связи с тем что в конце каждой имеется пробел. Может существует макрос чтобы его убрать? Количество строк динамическое(т.е может быть меньше может быть больше). |
Grr Пользователь Сообщений: 595 |
Стандартный функционал — «Найти/Заменить»? |
JeyCi Пользователь Сообщений: 3357 |
#9 05.10.2016 12:34:13 после 18-й строки (перед Next i) — можете вставить проверку
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах) |
||
Alex_24 Пользователь Сообщений: 9 |
#10 03.03.2018 16:30:49 Все похоже сделал правильно, а Excel ругается 5941 ошибкой. Что не так подскажите?
|
||
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
Alex_24, Вы видели, как форумчане оформляют свой код? Вот и Вы оформляйте аналогично: для этого есть специальная кнопка <…> |
Alex_24, Вы код вручную набивали, что ли? Бросилось в глаза: Есть еще ошибки, но до устранения замечания не скажу где. Изменено: Казанский — 03.03.2018 21:39:38 |
|
nuroraf Пользователь Сообщений: 1 |
JeyCi, Как при копировании сохранить знаки переноса строки? Код рабочий, но перенос строки не сохраняет.
Можно ли скопировать такое точь в точь в ячейку на экзеле? |
sokol92 Пользователь Сообщений: 4446 |
#14 03.05.2019 21:09:47 Добавьте после строки 18 в #3:
Владимир |
||
Игорь Пользователь Сообщений: 2 |
[CODE][/CODE] Изменено: Игорь — 29.03.2023 15:27:31 |
Игорь Пользователь Сообщений: 2 |
#16 29.03.2023 13:14:58
Изменено: Игорь — 29.03.2023 15:31:11 |
||
Skip to content
Как из Word перевести в Excel
На чтение 4 мин. Просмотров 7k.
Что делает макрос: Если вы обнаружите, что вы постоянно копируете данные и вставляете в Microsoft Word, вы можете использовать макрос, чтобы автоматизировать эту задачу.
Содержание
- Как макрос работает
- Код макроса
- Как этот код работает
- Как использовать
Как макрос работает
Перед тем как использовать макрос, очень важно к этому подготовиться. Чтобы подготовиться к процессу, вы должны иметь созданный шаблон Word . В этом документе, указать закладку, где вы хотите, чтобы ваши данные из Excel разместились.
Чтобы создать закладку в документе Word, поместите курсор в нужное место, выберите вкладку Вставка — Закладка. Это активизирует диалоговое окно Закладка, где вы назначаете имя
для закладки. После того, как назначено имя, нажмите кнопку Добавить.
Один из файлов образцов для этой части является документ под названием PasteTable.docx. Это документ представляет собой простой шаблон, который содержит одну закладку под названием DataTableHere. В этом примере кода вы скопируете диапазон к этому
шаблону PasteTable.docx, используя закладку DataTableHere, чтобы указать, где вставить скопированный диапазон.
Кроме того, необходимо установить ссылку на библиотеку объектов Microsoft Word.
Код макроса
Sub OtpravitDannieIzExcelVWord() 'Шаг 1: Объявляем переменные Dim MyRange As Excel.Range Dim wd As Word.Application Dim wdDoc As Word.Document Dim WdRange As Word.Range 'Шаг 2: Скопируйте определенный диапазон Sheets("таблица доходов").Range("B4:F10").Copy 'Шаг 3: Откройте целевой документ Word Set wd = New Word.Application Set wdDoc = wd.Documents.Open _ (ThisWorkbook.Path & "" & "PasteTable.docx") wd.Visible = True 'Шаг 4: Установить фокус на целевую закладку Set WdRange = wdDoc.Bookmarks("DataTableHere").Range 'Шаг 5: Удалить старую таблицу и вставить новую On Error Resume Next WdRange.Tables(1).Delete WdRange.Paste 'вставить в таблицу 'Шаг 6: Отрегулируйте ширину столбца WdRange.Tables(1).Columns.SetWidth _ (MyRange.Width / MyRange.Columns.Count), wdAdjustSameWidth 'Шаг 7: Вставьте закладку wdDoc.Bookmarks.Add "DataTableHere", WdRange 'Шаг 8: Очистка памяти Set wd = Nothing Set wdDoc = Nothing Set WdRange = Nothing End Sub
Как этот код работает
- Шаг 1 объявляет четыре переменные: MyRange содержит целевой диапазон Excel; WD является переменной, которая предоставляет объект Application Word; wdDoc является переменной объекта, которая выставляет объект Word Document; wdRange является переменной объекта, которая выставляет объект Range Word.
- Шаг 2 копирует диапазон таблицы рабочего листа. В этом примере, диапазон жёсткий, но мы всегда можем сделать этот выбор в нечто более переменное.
- Шаг 3 открывает существующий целевой документ Word, который служит в качестве шаблона. Обратите внимание, что мы устанавливаем свойство Visible приложения Word, в True.
Это гарантирует, что мы можем увидеть действие в Word, как работает код. - Шаг 4 использует объект Range в Word, чтобы установить фокус на целевой закладке. Это по существу выбирает закладку в виде диапазона, что позволяет принимать меры в этом диапазоне.
- Шаг 5 удаляет любую таблицу, которая может существовать внутри закладки, а затем вставляет скопированный диапазон Excel. Если мы не будем удалять любые существующие таблицы, скопированный диапазон добавится к существующим данным.
- Когда вы копируете диапазон Excel в документ Word, ширина столбцов не всегда соответствуют содержанию в клетках. Шаг 6 устраняет эту проблему путем регулировки ширины столбцов. Здесь, ширина каждого столбца установлена как число, которое равно общей ширине таблицы, разделенной на число столбцов в таблице.
- Когда мы копируем диапазон Excel для целевой закладки, мы, по существу, перезаписываем закладку. Шаг 7 воссоздает закладку, чтобы гарантировать, что в следующий раз, когда вы запустите этот код, закладка будет.
- Очистка памяти
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код.
Sub Procedure_1()
‘В константе «strDocFullName» нужно указать полное имя Word-документа,
‘из которого нужно скопировать таблицу.
Const strDocFullName As String = «C:UsersUserDesktopИз.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
[свернуть]
Answer taken from: http://www.mrexcel.com/forum/showthread.php?t=36875
Here is some code that reads a table from Word into the active worksheet of Excel. It prompts you for the word document as well as the table number if Word contains more than one table.
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.Clean(.cell(iRow, iCol).Range.Text)
Next iCol
Next iRow
End With
End With
Set wdDoc = Nothing
End Sub
This macro should be inserted into Excel (not Word) and put into a standard macro module rather than into the worksheet or workbook event code modules. To do this, go to the VBA (keyboard Alt-TMV), insert a macro module (Alt-IM), and paste the code into the code pane. Run the macro from the Excel interface as you would any other (Alt-TMM).
If your document contains many tables, as would be the case if your 100+ page table is actually a separate table on each page, this code could easily be modified to read all the tables. But for now I am hoping it is all one continuous table and will not require any modification.
Keep Excelling.
Damon
VBAexpert Excel Consulting
(My other life: http://damonostrander.com )