Копирование таблиц vba word

Sub ExcelRangeToWord()

‘PURPOSE: Copy/Paste An Excel Table Into a New Word Document
‘NOTE: Must have Word Object Library Active in Order to Run _
  (VBE > Tools > References > Microsoft Word 12.0 Object Library)

‘SOURCE: www.TheSpreadsheetGuru.com

Dim tbl As Excel.Range
Dim WordApp As Word.Application
Dim myDoc As Word.Document
Dim WordTable As Word.Table

‘Optimize Code
  Application.ScreenUpdating = False
  Application.EnableEvents = False

‘Copy Range from Excel
  Set tbl = ThisWorkbook.Worksheets(Sheet1.Name).ListObjects(«Table1»).Range

‘Create an Instance of MS Word
  On Error Resume Next

        ‘Is MS Word already opened?
      Set WordApp = GetObject(class:=»Word.Application»)

        ‘Clear the error between errors
      Err.Clear

    ‘If MS Word is not already open then open MS Word
      If WordApp Is Nothing Then Set WordApp = CreateObject(class:=»Word.Application»)

        ‘Handle if the Word Application is not found
      If Err.Number = 429 Then
        MsgBox «Microsoft Word could not be found, aborting.»
        GoTo EndRoutine
      End If

  On Error GoTo 0

  ‘Make MS Word Visible and Active
  WordApp.Visible = True
  WordApp.Activate

    ‘Create a New Document
  Set myDoc = WordApp.Documents.Add

  ‘Copy Excel Table Range
  tbl.Copy

‘Paste Table into MS Word
  myDoc.Paragraphs(1).Range.PasteExcelTable _
    LinkedToExcel:=False, _
    WordFormatting:=False, _
    RTF:=False

‘Autofit Table so it fits inside Word Document
  Set WordTable = myDoc.Tables(1)
  WordTable.AutoFitBehavior (wdAutoFitWindow)

   EndRoutine:
‘Optimize Code
  Application.ScreenUpdating = True
  Application.EnableEvents = True

‘Clear The Clipboard
  Application.CutCopyMode = False

End Sub

In this part of the code we are determining if Microsoft Word is open or not.  If Word is already open, we can set a variable equal to the entire program by using GetObject.  If MS Word is not currently running we can use CreateObject to run an instance of Word and then set a variable equal to that specific instance of MS Word.

When using CreateObject, the target application will start running but it is not visible on screen.  Therefore we need to turn the Visible setting on (equal to true).  Also, VBA with Word is a little bit different than with Excel in that it is much more dependent on its window showing on screen.  Therefore a second command must be written to Activate Microsoft Word.

Copy From Excel, Paste Onto Document

Now that you have a new document created, you can command Excel to paste your table into MS Word.  Near the beginning of the code, there was a line that allowed you to specify the exact table you wanted to copy.  The variable tbl was used to remember this table range and to allow you to reference the range later on in the code.  

Guru Tip: It is a good idea to place code that may need to be manually changed at some point in the future near the beginning of the subroutine.  This prevents you from having to scroll through your code and pinpoint the exact place where you spelled out which range you wanted to copy or which worksheet you wanted to pull data from.  This can save you a bunch of time and prevent confusion!

Word has a special method called PasteExcelTable, which (as you can guess) allows you paste in an Excel table.  There are three variables you can tweak to get you table looking and functioning just the way you want.

  • LinkedToExcel True links the pasted table to the original Excel file so that changes made to the Excel file are reflected in Microsoft Word.

  • WordFormatting True formats the table using the formatting in the Word document.  False formats the table according to the original Excel file.

  • RTF True pastes the Excel table using Rich Text Format (RTF).  False pastes the Excel table as HTML.

Now for the last step!  Depending on how large your table is, it may be spilling outside of your document page.  In order to prevent this from happening you can go ahead and use AutoFitBehavior to resize the table to fit perfectly inside your Word document.

About The Author

Hey there! I’m Chris and I run TheSpreadsheetGuru website in my spare time. By day, I’m actually a finance professional who relies on Microsoft Excel quite heavily in the corporate world. I love taking the things I learn in the “real world” and sharing them with everyone here on this site so that you too can become a spreadsheet guru at your company.

Through my years in the corporate world, I’ve been able to pick up on opportunities to make working with Excel better and have built a variety of Excel add-ins, from inserting tickmark symbols to automating copy/pasting from Excel to PowerPoint. If you’d like to keep up to date with the latest Excel news and directly get emailed the most meaningful Excel tips I’ve learned over the years, you can sign up for my free newsletters. I hope I was able to provide you with some value today and I hope to see you back here soon!

— Chris
Founder, TheSpreadsheetGuru.com

Sub макрос()

        Dim docSrc As Document, docRes As Document, rngTable As Range
    Dim strFN As String

        ‘1. Отключение монитора. Может это уменьшит мерцание и может ускорит макрос.
    Application.ScreenUpdating = False

    ‘2. Юзер выбирает файл, в котором таблица.
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Filters.Clear
        .Filters.Add «Документы Word», «*.docx»
        If .Show = 0 Then
            Exit Sub
        End If
        strFN = .SelectedItems(1)
    End With

        ‘3. Присваивание имени «docRes» активного файлу (в который надо вставить таблицу).
        ‘ После открытия другого файла, он станет неактивным.
    Set docRes = ActiveDocument

        ‘4. Открытие файла, в котором таблица. При этом присваиваем файлу имя «docSrc».
    Set docSrc = Documents.Open(FileName:=strFN)

        ‘5. Копирование таблицы из одного файла в другой.
    With docRes.Range.find
        ‘ Текст-метка, куда надо вставить таблицу.
        .Text = «~таблица~»
        ‘ Поиск текста-метки.
        .Execute
        ‘ Присваиваем имя «rngTable» фрагменту, в котором находится текст-метка.
            ‘ Parent — это найденный текст.
        Set rngTable = .Parent
    End With

        ‘6. Убираем цветовую заливку.
    rngTable.HighlightColorIndex = wdNoHighlight

        ‘7. Вставка таблицы. Копируется первая таблица из файла-источника.
    docSrc.Tables(1).Range.Copy
    rngTable.Paste

        ‘8. Очистка буфера обмена. Если таблица большая, то при закрытии ворда
        ‘ будет сообщение, что в буфере много данных.
        ‘ Просто копируем первый символ.
    docSrc.Range.Characters(1).Copy

        ‘9. Закрытие файла-источника.
    docSrc.Close SaveChanges:=False

        ’10. Включение монитора.
    Application.ScreenUpdating = True

    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 )

Вставка таблицы Excel в документ Word с помощью кода VBA Excel. Метод Selection.PasteExcelTable: синтаксис, параметры, пример использования.

Работа с Word из кода VBA Excel
Часть 6. Вставка таблицы Excel в документ Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]

Метод Selection.PasteExcelTable

Метод Range.Paste, использующийся в VBA Word для вставки в документ таблиц, скопированных в буфер обмена из другого документа Word, не применим для вставки в документ таблиц, скопированных из книги Excel. Для этих целей используется метод Selection.PasteExcelTable.

Selection.PasteExcelTable — это метод, предназначенный для вставки Excel-таблицы из буфера обмена в документ Word и ее форматирования в соответствии с заданными параметрами.

Синтаксис

Expression.PasteExcelTable(LinkedToExcel, WordFormatting, RTF)

Expression — переменная, представляющая объект Selection. В том числе, это может быть курсор или закладка.

Параметры

Все параметры метода Selection.PasteExcelTable логического типа и являются обязательными.

Параметр Описание
LinkedToExcel True — вставленная таблица связывается с исходным файлом Excel, чтобы изменения, внесенные в файл Excel, отображались в Microsoft Word.
False — связь между вставленной таблицей и таблицей в исходном файле не устанавливается.
WordFormatting True — вставленная таблица будет отформатирована как таблица документа Word.
False — вставленная таблица будет отформатирована в соответствии с исходным файлом Excel.
RTF True — Excel-таблица будет вставлена в расширенном текстовом формате (RTF).
False — Excel-таблица будет вставлена в формате HTML-таблицы.

Допустим, у нас есть таблица Excel, начинающаяся с ячейки A1 (или с любой другой), и нам необходимо скопировать эту таблицу в существующий документ Word, вставив ее на место закладки «Закладка1».

Решение:

Sub Primer()

Dim myWord As New Word.Application, myDoc As Word.Document

‘Открываем существующий документ Word

Set myDoc = myWord.Documents.Open(«C:ТестоваяДокумент1.docx»)

‘Копируем таблицу на активном листе в буфер обмена

‘Вместо ячейки Range(«A1») можно указать любую другую, расположенную внутри таблицы

Range(«A1»).CurrentRegion.Copy

‘Вставляем таблицу из буфера обмена на место закладки

myDoc.Bookmarks(«Закладка1»).Range.PasteExcelTable False, False, False

‘Отображаем программу Word

myWord.Visible = True

‘Очищаем переменные

Set myWord = Nothing

Set myDoc = Nothing

End Sub

Если необходимо таблицу вставить в конец документа, строку

myDoc.Bookmarks(«Закладка1»).Range.PasteExcelTable False, False, False

следует заменить на

With myDoc

    ‘Переводим курсор в конец документа

    .Range(.Range.Characters.Count 1, .Range.Characters.Count 1).Select

    ‘Добавляем перенос строки, если необходимо

    .ActiveWindow.Selection.InsertAfter vbCr

    ‘Переводим курсор в конец документа

    .Range(.Range.Characters.Count 1, .Range.Characters.Count 1).Select

    ‘Вставляем таблицу из буфера обмена

    .ActiveWindow.Selection.PasteExcelTable False, False, False

End With


ДОбрый день, уважаемые специалисты и гости форума.

Вопрос по VBA Word 2003.

Задача: в одном файле есть таблица, ее нужно перенести в другой файл без изменений, причем там, чтобы таблица была отобрана из всех таблиц в документе по совпадению строки. Получился следующий код:

Sub KopirovanieDatiVEtotGeFail()
Dim strFIOTable As Range
strFIOTable = MatchedTable("фамилия")
Documents.Add Template:="c:UserslordDesktopTemplate.dot"
 End Sub
Function MatchedTable(strMatch As String)
For Each aTable In ActiveDocument.Tables
aTable.Select
Set tmpTable = Selection.Range
Dim tableMatch As New RegExp
tableMatch.Global = False
tableMatch.Multiline = True
tableMatch.IgnoreCase = True
tableMatch.Pattern = strMatch '<--это "фаимлия"
If tableMatch.Test(tmpTable) Then
Dim rMatchedTable As Range
Set rMatchedTable = tmpTable 'здесь нужна помощь
'strTable = tmpTable 
'strTable.Select
rMatchedTable.Select
End If
Next aTable
MatchedTable = rMatchedTable 'здесь нужна помощь
End Function

Проблема возникла с возвратом объекта «Таблица» из функции — не могу присвоить его в переменную и вставить в новый документ в нужную закладку. Если я делаю strTable (As String) = tmpTable, то вся таблица превращается в строку и в новый файл вставляется в виде
текста без разделителей. Если помечаю Function MatchedText(strMatch As String) As Range (чтобы из функции получить таблицу в качестве Range), то в самом конце функции я не могу присвоить  MatchedTable = rMatchedTable (ругается на отсутсвие with, а я не
могу понять, где его вставить). Задача сводится к тому, чтобы на выходе функции получить таблицу в виде таблицы, а не строки, и перенести ее в новый файл без изменений. На выбор у меня (из моего понимания мануала) есть несколько вариантов:

— копать в сторону range…copy, range…paste

— копать в сторону метода ConvertToTable

Прошу Вашей помощи. Буду благодарен за любые советы.

Пробовал искать информацию самостоятельно: везде пишут только про вставку информации из таблицы, вставку информации из таблицы word в excel или наоборот, но вот как просто скопировать таблицу из word целиком — не могу понять. Заранее всем спасибо

 

Dedmoroz86

Пользователь

Сообщений: 6
Регистрация: 04.10.2016

Друзья, помогите. Необходимо сделать следующее:
Смысл такой: в папке с текущим файлом Excel имеется файл Word(в формате «дизайн.rtf») его необходимо открыть и из него скопировать первые 4 таблицы. Затем вставить в ячейки Exсel и закрыть Word.
Всю голову сломал, никак не получается…. Помогите пожалуйста.  

Прикрепленные файлы

  • дизайн.rar (13.9 КБ)

 

Grr

Пользователь

Сообщений: 595
Регистрация: 17.09.2013

#2

05.10.2016 05:23:55

Одна табличка 3х3

Скрытый текст

Изменено: Grr05.10.2016 10:18:41

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

#3

05.10.2016 07:22:29

4 таблицы
файл должен лежать в одной папке с rtf-файлом

Код
Sub Copy_Word_Tables()
Dim arr As Variant
With Application: .ScreenUpdating = False: .EnableEvents = False: .DisplayAlerts = False: .Calculation = xlManual: End With

'открытие Word-файла
    Set oWord = CreateObject("Word.Application")
    oWord.Visible = True
    Set oDoc = oWord.Documents.Open(ThisWorkbook.Path & "" & "дизайн.rtf")
    
ThisWorkbook.Sheets(1).UsedRange.ClearContents
rr = 1

'On Error Resume Next
For aTbl = 1 To 4   'oDoc.tables.Count
ReDim arr(1 To oDoc.tables(aTbl).Rows.Count, 1 To oDoc.tables(aTbl).Columns.Count)
    For j = 1 To UBound(arr, 2)
        For i = 1 To UBound(arr, 1)
            arr(i, j) = Trim(Replace(oDoc.tables(aTbl).cell(i, j).Range.Text, Chr(7), ""))
        Next i
    Next j
ThisWorkbook.Sheets(1).Range("A" & rr).Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
rr = rr + oDoc.tables(aTbl).Rows.Count + 2
arr = Empty
Next

oWord.Quit False
'..................
With Application: .ScreenUpdating = True: .EnableEvents = True: .DisplayAlerts = True: .Calculation = xlAutomatic: End With
MsgBox "Tables loaded"
End Sub

Прикрепленные файлы

  • Copy_Word_Tables.xlsm (19.52 КБ)

Изменено: JeyCi05.10.2016 07:34:45

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

Grr

Пользователь

Сообщений: 595
Регистрация: 17.09.2013

JeyCi, никакого пространства для самодеятельности не оставили :)

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

#5

05.10.2016 07:34:29

Цитата
Grr написал: никакого пространства для самодеятельности

названия таблиц из word’а выковыривать не буду  :) — оставляю для самодеятельности  

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

Dedmoroz86

Пользователь

Сообщений: 6
Регистрация: 04.10.2016

Огромное спасибо!!!! Помогло! =))))))  

 

Dedmoroz86

Пользователь

Сообщений: 6
Регистрация: 04.10.2016

Один вопрос остался, все цифры не поддаются математическим расчетам, в связи с тем что в конце каждой имеется пробел. Может существует макрос чтобы его убрать? Количество строк динамическое(т.е может быть меньше может быть больше).  

 

Grr

Пользователь

Сообщений: 595
Регистрация: 17.09.2013

Стандартный функционал — «Найти/Заменить»?

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

#9

05.10.2016 12:34:13

после 18-й строки (перед Next i) — можете вставить проверку

Код
If IsNumeric(arr(i, j)) Then arr(i, j) = --arr(i, j)

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

Alex_24

Пользователь

Сообщений: 9
Регистрация: 22.01.2018

#10

03.03.2018 16:30:49

Все похоже сделал правильно, а Excel ругается 5941 ошибкой. Что не так подскажите?

Код
Sub Copy_Word_Tables()
Dim arr As Variant
Dim fileToOpen
With Application: .ScreenUpdating = False: .EnableEvents = False: .DisplayAlerts = False: Calculation = xManual: End With
Set oWord = CreateObject("Word.Application")
oWord.Visible = True
fileToOpen = Application.GetOpenFilename("Only these Files (*.txt;*.doc*;*.xls*), *.txt; *.doc*; *.xls*")
Set oDoc = oWord.Documents.Open(fileToOpen)
ThisWorkbook.Sheets("Вводный").UsedRange.ClearContents
rr = 1
ReDim arr(1 To oDoc.tables(1).Rows.Count, 1 To oDoc.tables(1).Columns.Count)
For j = 1 To UBound(arr, 2)
    For i = 1 To UBound(arr, 1)
    arr(i, j) = Trim(Replace(oDoc.tables(1).cell(i, j).Range.Text, Chr(7), ""))
    Next i
Next j
ThisWorkbook.Sheets("Вводный").Range("A" & rr).Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
rr = rr + oDoc.tables(1).RowCount + 2
oWord.Ouit False
With Application: .ScreenUpdating = True: .EnableEvents = True: .DisplayAlerts = True: Calculation = xManual: End With
End Sub
 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Alex_24, Вы видели, как форумчане оформляют свой код? Вот и Вы оформляйте аналогично: для этого есть специальная кнопка <…>

 

Alex_24, Вы код вручную набивали, что ли? Бросилось в глаза:
— 4 строка .Calculation = xlManual
— 3 c конца строка oWord.Quit False

Есть еще ошибки, но до устранения замечания не скажу где.

Изменено: Казанский03.03.2018 21:39:38

 

nuroraf

Пользователь

Сообщений: 1
Регистрация: 03.05.2019

JeyCi,

Как при копировании сохранить знаки переноса строки? Код рабочий, но перенос строки не сохраняет.
Скажем в одной ячейке таблицы ворд находится следующее:

  • ·           One

  • ·         Two

  • ·         Three

  • ·         Four

Можно ли скопировать такое точь в точь в ячейку на экзеле?

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

#14

03.05.2019 21:09:47

Добавьте после строки 18 в #3:

Код
            While Right(arr(i, j), 1) = Chr(10) Or Right(arr(i, j), 1) = Chr(13)
              arr(i, j) = Left(arr(i, j), Len(arr(i, j)) - 1)
            Wend
            arr(i, j) = Replace(arr(i, j), Chr(13), Chr(10))

Владимир

 

Игорь

Пользователь

Сообщений: 2
Регистрация: 28.03.2023

[CODE][/CODE]

Изменено: Игорь29.03.2023 15:27:31

 

Игорь

Пользователь

Сообщений: 2
Регистрация: 28.03.2023

#16

29.03.2023 13:14:58

Код
"спасибо" за помощь. Модераторы удалите мои сообщения.

Изменено: Игорь29.03.2023 15:31:11

Soferon

4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

1

Копирование таблицы из экселя в ворд

07.09.2016, 11:28. Показов 13040. Ответов 20

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день, помогите реализовать. такую фишку.
Созданную таблицу в экселе нужно скопировать в ворд. пробовал написать код не вышло.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub ЭкспортВВОРД()
 
 
Dim adr As String
Dim copyTABL As Object
    
    adr = ActiveWorkbook.Path
 
ActiveWindow.SmallScroll Down:=27 
Range("A1:C39").Select
ActiveWindow.SmallScroll Down:=-39
Selection.Copy
 
Set oWord = CreateObject("Word.Application") 
    oWord.Visible = True
Set oDoc = oWord.Documents.Add()
    oDoc.Activate
    
    Selection.Paste 
    MyRange.Collapse Direction:=wdCollapseStart
    MyRange.Paste
   
 
End Sub

Вложения

Тип файла: rar Расчет и маршруты.rar (17.4 Кб, 21 просмотров)



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.09.2016, 11:42

2

Так подойдёт ?

Visual Basic
1
2
3
4
5
6
Range("A1:C39").Copy
With CreateObject("Word.Application").Documents.Add
     .Range.Paste '.Range.PasteExcelTable
     .Parent.Visible = True
End With
Application.CutCopyMode = False



1



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

07.09.2016, 14:45

 [ТС]

3

Спасибо, нормально вот только вставляет криво. то есть растягивает. можно как то параметры вставки сделать меж строчный интервал и тому подобное. прост та таблица в экселе сделана с определенными размерами.



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.09.2016, 15:31

4

В Word при масштабе 100% отличий(растягиваний) — не заметил.



0



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

07.09.2016, 15:45

 [ТС]

5

растягивание по вертикали. в общем должно вылезти на 1 лист.



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.09.2016, 17:04

6

Если после копирования нельзя изменить высоту строк в таблице, то можете попробовать копировать рисунок и вставить не таблицу, а скриншот.



0



Soferon

4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

08.09.2016, 09:31

 [ТС]

7

pashulka, подумал над проблемой, можешь помочь с написанием кода.
задумка такая. создаем новый документ, далее сохраняем его в папку с экселевским документом. запускаем макрос созданный (записанный в ворде на форматирование текста) сохраняем изменения и закрываем документ.

вот не много по другому записал ваш код. тоже рабочий до сохранения документа.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub ÝêñïîðòÂÂîðä()
 
Dim adr As String
Dim AppWord As Object
Dim oDoc As Object
 
adr = ActiveWorkbook.Path
 
Range("A1:C39").Copy
 
Set AppWord = CreateObject("Word.Application")
AppWord.Visible = True
AppWord.Documents.Add
AppWord.Selection.Paste
AppWord.Activate
 
'ChangeFileOpenDirectory "adr"
    ActiveDocument.SaveAs Filename:="Îò÷åò î ïðîåçäå", FileFormat:= _
        wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False
    MsgBox ("Ôàéë ñîõðàíåí íà ðàáî÷èé ñòîë ïîä èìåíåì " & " '" & adr & " ' ")
 
 
    
 
Application.CutCopyMode = False
 
End Sub



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

08.09.2016, 10:44

8

Где макрос, который, цитирую «записанный в ворде на форматирование текста»



0



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

08.09.2016, 12:32

 [ТС]

9

еще не записал. его. записать то не долго, а потом запустить. пока бьюсь с проблемой сохранения..



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

08.09.2016, 13:34

10

Лучший ответ Сообщение было отмечено Soferon как решение

Решение

Visual Basic
1
2
3
4
5
6
7
Range("A1:C39").Copy
With CreateObject("Word.Application").Documents.Add
     .Range.PasteExcelTable False, False, True '.Range.Paste
     .SaveAs Filename:=ActiveWorkbook.Path & "Имя_документа.docx", FileFormat:=12 'wdFormatXMLDocument
     .Parent.Visible = True
End With
Application.CutCopyMode = False

P.S. В Вашей версии действительно наличествует несовпадение высоты строк, причём, довольно существенное. Workaround прилагается :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Range("A1:C39").Copy
With CreateObject("Word.Application").Documents.Add
     .Range.Paste '.Range.PasteExcelTable False, False, True
     With .Tables(1)
          .Rows.HeightRule = 2 'wdRowHeightExactly
          For i = 1 To 39
              .Rows(i).Height = Rows(i).Height
          Next
     End With
     .SaveAs Filename:=ActiveWorkbook.Path & "Имя_документа.docx", FileFormat:=12 'wdFormatXMLDocument
     .Parent.Visible = True
End With
Application.CutCopyMode = False



1



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

08.09.2016, 17:14

 [ТС]

11

ого уважаемый pashulka, , да вы супер..
Протестировал, все нравится новых фишек прикрутил. пытаюсь сразу же отправлять по почте. через аутлук. но почему не не прикладывает мой документ. можете помочь



0



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

08.09.2016, 17:15

 [ТС]

12

вордовский документ



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

08.09.2016, 18:05

13

Лучший ответ Сообщение было отмечено Soferon как решение

Решение

Смотрите аттач, только перед тестированием, не забудьте указать свою почту.



1



Soferon

4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

16.09.2016, 11:33

 [ТС]

14

Что добавить в ваш код чтобы документ сохранялся со шрифтом «Times New Roman»

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
Range("A1:C39").Copy
With CreateObject("Word.Application").Documents.Add
     .Range.Paste '.Range.PasteExcelTable False, False, True
     With .Tables(1)
          .Rows.HeightRule = 2 'wdRowHeightExactly
          For i = 1 To 39
              .Rows(i).Height = Rows(i).Height
          Next
     End With
     .SaveAs Filename:=ActiveWorkbook.Path & "Имя_документа.docx", FileFormat:=12 'wdFormatXMLDocument
     .Parent.Visible = True
End With
Application.CutCopyMode = False



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

16.09.2016, 12:11

15

Например :

Visual Basic
1
2
With .Tables(1)
     .Range.Font.Name = "Times New Roman"



1



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

16.09.2016, 12:39

 [ТС]

16

Спасибо работает.



0



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

27.09.2016, 13:02

 [ТС]

17

Ну очень мне понравилась эта фишка, применяю везде где только можно. не много видо изменяя код. столкнулся с такой проблемой, во вложении файл Плана . нужно скопировать уже две таблицы с разных листов, с первым все получается на ура. вот со вторым не катит. все перепробовал. видел много в инете копирование по закладкам, но вот только диапазоны по закладкам не сопирутся, вставляет адрес диапазона. pashulka, можете чем помочь?



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

27.09.2016, 14:58

18

Soferon, Об’единённые ячейки — это зло, тем паче в Word. Если исправите вторую таблицу, то получите необходимый результат, если нет, то после копирования второй таблицы, получите ошибку «Отсутствует доступ к отдельным строкам, поскольку таблица имеет ячейки, объединенные по вертикали.»



0



4 / 4 / 1

Регистрация: 22.06.2015

Сообщений: 98

27.09.2016, 15:43

 [ТС]

19

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



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

27.09.2016, 20:27

20

Проблем, связанных с копированием с разных листов, особо не наблюдается (см.пример)



1



Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Копирование таблиц excel с форматированием
  • Копирование строку макрос word
  • Копирование строки таблицы excel макрос
  • Копирование строки по условию vba excel
  • Копирование строк на другой лист если excel

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии