Vova67 Пользователь Сообщений: 31 |
#1 07.11.2017 15:31:36 Всем привет. Вот фрагмент кода , где копия листа схраняется в формате Pdf.
Но так как на компьютере, где выполняется макрос установлен Excel 2003, эта операция невозможна. Изменено: Vova67 — 07.11.2017 15:36:00 |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Сохранять в Word не так-то просто. Для этого надо сначала подключиться к самому Word. Далее надо будет вставить все данные листа. А потом самое сложное — отформатировать так, чтобы это вменяемо выглядело. Попробуйте просто скопировать всю необходимую инф-цию с листа Excel и вставить её на чистый лист Word. Если результат устроит — постараюсь накидать код. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
Vova67 Пользователь Сообщений: 31 |
#3 07.11.2017 16:06:53
Сделал как вы сказали. Результат полностью устроил. Изменено: Vova67 — 07.11.2017 16:10:51 |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#4 07.11.2017 18:06:39 Пробуйте:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
cuprum Пользователь Сообщений: 226 |
А если попробовать печать на виртуальный принтер типа doPDF? |
Vova67 Пользователь Сообщений: 31 |
К сожалению такой вариант не подходит, лист «Рапорт» должен распечатываться и сохраняться его копия в один клик. Таковы условия на производстве… The_Prist , вставил Ваш код, создается вордовский файл, с нужным именем, но пустой… |
Александр П. Пользователь Сообщений: 1147 |
#7 08.11.2017 02:31:45 The_Prist, Простите Дмитрий, у вас в 34ой строчке не опечатка ?
Наверное, всё же, так должно быть.
Изменено: Александр П. — 08.11.2017 02:36:44 |
||||
Vova67 Пользователь Сообщений: 31 |
Александр П.
— в точку! Все работает! Спасибо The_Prist , спасибо Александр П. ! |
Vova67 Пользователь Сообщений: 31 |
Эх, еще маленький нюанс.Не сохраняется диаграмма . Но если это сложно, то и фиг с ней. |
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#10 08.11.2017 20:41:54
Нет, надо было просто строки местами поменять, что я забыл сделать
Не знаю что там не сохраняется и где именно эта диаграмма. Как вариант можно попробовать в обязательном порядке в крайней нижней правой ячейке от диаграммы поставить пробел и после этого выполнять макрос. Возможно, диаграмма полностью не попадает в рабочую область и именно поэтому не копируется. Но объекты при методе Copy с листа Excel могут не попадать в буфер обмена (наблюдал такое поведение на некоторых версиях). Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
Vova67 Пользователь Сообщений: 31 |
#11 09.11.2017 10:32:12
Да, именно эта причина. Немного поигрался местоположением диаграммы и все стало хорошо. Большое вам спасибо. И пробел тоже помог… Изменено: Vova67 — 09.11.2017 11:10:18 |
||
Olzhas Пользователь Сообщений: 1 |
#12 22.01.2021 13:50:52
Добрый день! Изменено: Olzhas — 03.03.2021 12:34:22 |
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#13 22.01.2021 14:12:34
файл не смотрел, но колонтитулы вообще отдельная тема и их так же отдельно надо переносить. Копировать не получится. Не самая простая тема.
я писал в самом начале темы:
после переноса надо все подгонять под нужный Вам формат. Тоже не самое мое любимое занятие. Это надо делать уже в Word. Перенесите туда таблицу как есть и попробуйте отформатировать до нужного состояния руками. Если это будет просто(типа просто ужали её с краев) — значит вполне легко можно это записать макрорекордером ворда и подставить в код из Excel. А если там куча подстроек под размер — это уже совершенно отдельная тема и тоже не самая простая, возможно. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
A couple quick things will get you to a solution.
The first is to loop through the worksheets in your workbook, like this:
Dim ws As Worksheet
For Each ws in ThisWorkbook.Sheets
Debug.Print "The used range is " & ws.UsedRange.Address
Next ws
The next part is to understand how adding content to a Word document is accomplished. The main concept involves where the insertion point for the document is located — generally this is the current Selection
.
When you cut and paste into a Word document, the content just pasted is still «selected». This means that any subsequent paste will effectively replace what you just inserted. So you have to move the selection point to the end of the document.
Putting it all together in an example program:
Option Explicit
Public Sub ExcelToWord()
Dim wb As Workbook
Set wb = ThisWorkbook
'--- create the Word document
Dim objWd As Word.Application
Set objWd = CreateObject("word.application")
objWd.Visible = True
Dim objDoc As Word.Document
Set objDoc = objWd.Documents.Add
objDoc.PageSetup.Orientation = 1 ' portrait = 0
Const wdPageBreak As Long = 7
Dim ws As Worksheet
For Each ws In wb.Sheets
ws.UsedRange.Copy
objWd.Selection.Paste
'--- advance the selection point to the end of
' the document and insert a page break, then
' advance the insertion point past the break
objDoc.Characters.Last.Select
objWd.Selection.InsertBreak wdPageBreak
objDoc.Characters.Last.Select
Next ws
'objDoc.SaveAs Application.ThisWorkbook.Path & ".dokument.docx"
End Sub
Сохранить листа Exel в .docx. |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
This Excel VBA tutorial explains how to export Excel to Word.
You may also want to read:
Export Excel to PDF
In the previous post, I demonstrated how to export Excel to PDF, which is very easy because there is already a built in function to do that (using Save As and choose PDF). However, there is no built in function to export Excel to Word. Fortunately Excel cell is actually a table in Word, we can simply copy the cells and paste to Word. This tutorial explains how to do it automatically using Excel VBA to export Excel to Word.
Excel VBA export Excel to Word (Single Worksheet)
Excel has about 1M rows and 16k columns, we cannot simply export the whole spreadsheet to Word. So the first question to think about is, what Range do we need to export to Word? My recommendation is to export all UsedRange. You may also consider to reset UsedRange before copy as explained in my previous post.
Insert the following Procedure in Excel Module
Sub export_excel_to_word() Set obj = CreateObject("Word.Application") obj.Visible = True Set newObj = obj.Documents.Add ActiveSheet.UsedRange.Copy newObj.Range.Paste Application.CutCopyMode = False obj.Activate newObj.SaveAs Filename:=Application.ActiveWorkbook.Path & "" & ActiveSheet.Name End Sub
For example, we have the below worksheet
Run the Macro, and the below new Word document will pop up. The Word document is automatically saved as the Worksheet name under the same folder of the Workbook.
It is possible that the imported table length is too wide to display in Word, you can also use Word VBA Table.AutoFitBehavior Method to auto fit the table, which has the same effect of AutoFit in Word as below.
Run the below macro in Word VBA to loop through all tables in Word document to autosize.
Sub autoSizeTbl() For Each tbl In ActiveDocument.Tables tbl.AutoFitBehavior wdAutoFitContent Next End Sub
Ideally this Macro can be run from Excel VBA, unfortunately I can’t get it work properly.
Excel VBA export Excel to Word (Multiple Worksheets)
Assume that we have Sheet1, Sheet2, Sheet3 in a Workbook “Export.xlsm”, we want to export all three worksheets to a single workbook.
Insert a Excel Module and paste the below Procedure.
The below Procedure will copy usedRange of each Worksheet to Word and page break by each Worksheet. Finally save and name the Word document as the Workbook name.
Sub export_workbook_to_word() Set obj = CreateObject("Word.Application") obj.Visible = True Set newobj = obj.Documents.Add For Each ws In ActiveWorkbook.Sheets ws.UsedRange.Copy newobj.ActiveWindow.Selection.PasteExcelTable False, False, False newobj.ActiveWindow.Selection.InsertBreak Type:=7 Next newobj.ActiveWindow.Selection.TypeBackspace newobj.ActiveWindow.Selection.TypeBackspace obj.Activate newobj.SaveAs Filename:=Application.ActiveWorkbook.Path & "" & Split(ActiveWorkbook.Name, ".")(0) End Sub
Run the Macro, a Word document called “Export.docx” pops up. Worksheet1 is pasted in page 1, Worksheet2 is pasted in page 2, Worksheet3 is pasted in page 3.
Несколько быстрых вещей приведут вас к решению.
Первый — это циклически просматривать листы в вашей книге, например так:
Dim ws As Worksheet
For Each ws in ThisWorkbook.Sheets
Debug.Print "The used range is " & ws.UsedRange.Address
Next ws
Следующая часть состоит в том, чтобы понять, как выполняется добавление содержимого в документ Word. Основная концепция заключается в том, где находится точка вставки документа — обычно это текущая Selection
,
Когда вы вырезаете и вставляете в документ Word, только что вставленный контент остается «выделенным». Это означает, что любая последующая вставка эффективно заменит то, что вы только что вставили. Таким образом, вы должны переместить точку выбора в конец документа.
Собираем все вместе в пример программы:
Option Explicit
Public Sub ExcelToWord()
Dim wb As Workbook
Set wb = ThisWorkbook
'--- create the Word document
Dim objWd As Word.Application
Set objWd = CreateObject("word.application")
objWd.Visible = True
Dim objDoc As Word.Document
Set objDoc = objWd.Documents.Add
objDoc.PageSetup.Orientation = 1 ' portrait = 0
Const wdPageBreak As Long = 7
Dim ws As Worksheet
For Each ws In wb.Sheets
ws.UsedRange.Copy
objWd.Selection.Paste
'--- advance the selection point to the end of
' the document and insert a page break, then
' advance the insertion point past the break
objDoc.Characters.Last.Select
objWd.Selection.InsertBreak wdPageBreak
objDoc.Characters.Last.Select
Next ws
'objDoc.SaveAs Application.ThisWorkbook.Path & ".dokument.docx"
End Sub