Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Макрос эспорта Excel в Word / 10 сообщений из 10, страница 1 из 1
24.09.2012, 18:02
    #37970363
The_Ivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос эспорта Excel в Word
Доброе время суток, нужна помощь в написании макроса!!!
В двух словах: в Excel есть большая таблица,в Excel параметры страницы сделаны так, чтоб колонки и строки не выходили за границы листа. Нужно экспортировать в Word так, чтоб параметры листа сохранились, и не приходилось танцевать с бубном, и подгонять таблицу, чтоб ничего не вылезало.
Специальная вставка не подойдет!

Пример таблицы и того, что хочется получить в итого прикрепляю.
...
Рейтинг: 0 / 0
24.09.2012, 18:05
    #37970371
The_Ivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос эспорта Excel в Word
...
Рейтинг: 0 / 0
24.09.2012, 19:57
    #37970488
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос эспорта Excel в Word
> The_Ivan,
> {skipped}
> Специальная вставка не подойдет!

Почему? Может Вы её готовить не умеете?
Со специальной вставкой всего-то пара копи-пастов + ещё некоторые "телодвижения"...
...
Рейтинг: 0 / 0
24.09.2012, 21:54
    #37970570
The_Ivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос эспорта Excel в Word
скукотища,

Пользоваться специальной вставкой я умею, просто ею пользоваться не так уже и удобно при больших таблицах, и при частых их изменениях в размере!
...
Рейтинг: 0 / 0
24.09.2012, 21:56
    #37970572
The_Ivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос эспорта Excel в Word
Буду признателен, если кто-то поможет по сути вопроса.
...
Рейтинг: 0 / 0
24.09.2012, 22:33
    #37970600
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос эспорта Excel в Word
> The_Ivan
> Пользоваться специальной вставкой я умею, просто ею пользоваться не так уже и удобно при больших таблицах

Таблица, которую Вы выложили в примере, - большая ?


ЗЫ: Я как те корейские браконьеры, - не понимаю, что за проблема была у Басервилля. почему Вы так упорно отказываетесь от специальной вставки.
При сложном форматировании source-table специальная вставка (формат HTML) наименее трудоёмкий процесс "экспорта".
Делать ли этот копипаст "вручную" или посредством "макроса" - это уже второй вопрос.
...
Рейтинг: 0 / 0
24.09.2012, 22:45
    #37970611
The_Ivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос эспорта Excel в Word
скукотища,

ну в принципе не особо, 18 страниц, но это пример, есть гораздо больше
...
Рейтинг: 0 / 0
25.09.2012, 10:46
    #37970952
The_Ivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос эспорта Excel в Word
скукотища,

Хорошо, если можно с помощью макроса сделать специальную вставку, так чтоб и параметры страницы из Excel в Word экспортировались, то пожалуйста предложите, я в ВБА не силен.
Просто в ручную это делать долго.
...
Рейтинг: 0 / 0
25.09.2012, 17:52
    #37971818
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос эспорта Excel в Word
The_Ivan,
примерный код с комментариями. Есть баги. Возможно социум подскажет, как их обойти.

Код: vbnet
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
Option Explicit

' =============================================================================
' копирование таблицы с первого листа данной книги в новый документ word
' обработка примера http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=971576&msg=13214591
Sub copypast()
'баг1: таблица получается не на всю ширину страницы :(
'баг2: после вставки word, собако, подбирает ширину столбцов "по содержимому"
'
    Const wdCollapseStart = 1, wdCollapseEnd = 0
    
    Dim wd As Object, doc As Object
    Dim iTmpRow As Long, s As String
    
    'создать объект word, добавить новый документ
    Set wd = CreateObject("word.application")
    Set doc = wd.documents.Add
    
    With ThisWorkbook.Worksheets(1)
        With .PageSetup
            ' *** размер страницы
            ' (!) будет работать только для форматов А3,А4
            ' (!) для остальных форматов не проверял соответствие вордовских и экселевских констант
            'xlPaperA4= 9 wdPaperA4= 7
            'xlPaperA3= 8 wdPaperA3= 6
            doc.PageSetup.PaperSize = .PaperSize - 2
            
            ' *** ориентация страницы
            'xlLandscape= 2 wdOrientLandscape= 1
            'xlPortrait=  1  wdOrientPortrait= 0
            doc.PageSetup.Orientation = .Orientation - 1
            
            ' *** поля
            doc.PageSetup.TopMargin = .TopMargin
            doc.PageSetup.BottomMargin = .BottomMargin
            doc.PageSetup.LeftMargin = .LeftMargin
            doc.PageSetup.RightMargin = .RightMargin
            
            ' *** сквозная *строка*
            ' (!) не строкИ, т.к. WORD не даст задать более одной строки в качестве заголовка
            ' (!) таблицы, если в последней есть вертикальное объединение ячеек
            '
            '    если .PrintTitleRows = "" то сквозных строк нет
            s = .PrintTitleRows
            
        End With '.PageSetup
        
        With .UsedRange
            If Len(s) > 0 Then iTmpRow = .Range(s).Row
            
            If iTmpRow > 1 Then
                'добавляем абзац в начало документа (позже пригодится)
                wd.Selection.InsertParagraphBefore
                wd.Selection.collapse wdCollapseEnd
            Else
                iTmpRow = 1
            End If
                
            'копипастим часть экселевской таблицы от "сквозной" строки до конца
            .Rows(iTmpRow & ":" & .Rows.Count).Copy
            wd.Selection.PasteExcelTable False, False, False
            
            'если в экселевской таблице есть "сквозные" строки
            'назначить первую строку вордовской таблицы её "шапкой"
            If Len(s) > 0 Then
'баг3       ' *непонятно*
            ' если устанавливать это свойство программно - не рисует шапку
            ' на каждой странице, хотя в юзерфейсе ворда флажок <Заголовки>
            ' для данной таблицы устанавливается
                doc.tables(1).Rows.HeadingFormat = True
            End If
            
            ' если "сквозная" строка в экселевской таблице не первая
            If iTmpRow > 1 Then
                'смещаем Selection в начало документа
                wd.Selection.Start = 0
                wd.Selection.collapse wdCollapseStart
            
                'копипастим "шапку" экселевской таблицы (от начала до "сквозной строки")
                .Rows("1:" & (iTmpRow - 1)).Copy
                wd.Selection.PasteExcelTable False, False, False
                
                'уменьшпем величину шрифта "буферного" абзаца
                wd.Selection.Font.Size = 1
            End If
                
        End With '.UsedRange
    End With 'ThisWorkbook.Worksheets(1)
    
    'освободить буфер обмена
    Application.CutCopyMode = False
    
    
    Set doc = Nothing
    wd.Visible = True
    Set wd = Nothing

End Sub


...
Рейтинг: 0 / 0
25.09.2012, 18:37
    #37971862
The_Ivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос эспорта Excel в Word
скукотища,

Спасибо большое, надеюсь что кто-то поможет довести до ума
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Макрос эспорта Excel в Word / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]