Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/22: Рейтинг темы: голосов - 22, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 8

Макрос эспорта Excel в Word

08.01.2013, 17:07. Показов 4648. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток
В двух словах: в Excel есть большая таблица,в Excel параметры страницы сделаны так, чтоб колонки и строки не выходили за границы листа. Нужно экспортировать в Word так, чтоб параметры листа сохранились, и не приходилось танцевать с бубном, и подгонять таблицу, чтоб ничего не вылезало.

Макрос какой-никакой мне помогли написать, но он не совсем адекватно работает

Кликните здесь для просмотра всего текста
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
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
Option Explicit
 
' =============================================================================
' копирование таблицы с первого листа данной книги в новый документ word
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


То, что хочется получить на выходе прикрепляю.
Заранее благодарен за помощь.
Вложения
Тип файла: zip Пример.zip (86.4 Кб, 48 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.01.2013, 17:07
Ответы с готовыми решениями:

Макрос Word Excel
Помогите запилить макросы пожалуйста Создать в Word макрос вычисляющий средние значения для каждого столбца выделенных ячеек таблицы и...

Макрос в Excel, использующий Word
Здравствуйте! Необходимо сделать следующую процедуру: есть несколько файлов Word, содержащих по 20-30 абзацев. Макрос в Excel должен...

Макрос выполняющий импорт из Word в Excel
Нужно написать макрос, который импортирует численную таблицу из Word в Excel, умножает все числа на 2 и возвращает эту таблицу обратно в...

10
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38190 / 21125 / 4307
Регистрация: 12.02.2012
Сообщений: 34,731
Записей в блоге: 14
08.01.2013, 20:30
Опыт показывает, что когда в Worde большие таблицы без бубна не обойтись... Я бы разметил бы таблицу в Worde, шрифт, поля бы подобрал, а потом из Excel переносил бы "поклеточно".
2
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 8
09.01.2013, 11:57  [ТС]
Спасибо за совет, я этот вариант в прицепе знаю, но возникнет проблема, когда редактируют файл Excel и в нем меняется количество строк и столбцов, вот по этой причине я и думал прибегнуть к помощи макросов
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
10.01.2013, 08:31
popochyh, а чем вам код из сообщения #1 не устраивает?
0
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 8
10.01.2013, 11:47  [ТС]
Скрипт
Цитата Сообщение от popochyh Посмотреть сообщение
Макрос какой-никакой мне помогли написать, но он не совсем адекватно работает
Там же в самом коде стоят примечания что именно не так работает!

К сообщению прикрепляю пример того, что не устраивает
Вложения
Тип файла: docx То, что получается.docx (42.3 Кб, 34 просмотров)
Тип файла: docx То, что хочется получить.docx (60.2 Кб, 27 просмотров)
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
10.01.2013, 12:25
popochyh, я просто скопировал таблицу в Excel и вставил в документ Word.
Сделал в документе поля, ориентацию, а у таблицы сделал "Автоподбор по ширине окна".
Что не так (см. вложение)?
Вложения
Тип файла: zip График_v_2.zip (71.3 Кб, 31 просмотров)
1
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 8
10.01.2013, 13:02  [ТС]
Скрипт, есть некоторые минусы в этом способе:
1) Сквозные строки
2) Размер шрифта
3) Порядок страниц
4) Есть таблице в которых "Автоподбор по ширине окна" работает некорректно, следовательно необходимо вручную, а вручную можно тогда и с "специальной вставкой" поморочиться

Смысл макроса, 1 рас поломать голову, чтоб потом 1 кликом мышки заменить танци с бубном
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
10.01.2013, 13:06
Цитата Сообщение от popochyh Посмотреть сообщение
1) Сквозные строки
что вы под этим подразумеваете?
1
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 8
10.01.2013, 13:44  [ТС]
Скрипт
Цитата Сообщение от Скрипт Посмотреть сообщение
что вы под этим подразумеваете?
перенос на след. страници сроки с нумерацией столбцов как заголовка
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
10.01.2013, 13:50
Цитата Сообщение от popochyh Посмотреть сообщение
3) Порядок страниц
а это как понять?
1
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 8
10.01.2013, 15:24  [ТС]
Цитата Сообщение от Скрипт Посмотреть сообщение
а это как понять?
Скрипт, это применительно не к данному случаю, но при таком способе могут перелазить строки таблици из одной страници на другую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.01.2013, 15:24
Помогаю со студенческими работами здесь

Мне необходимо из макроса Excel запустить макрос Word.
Мне необходимо из макроса Excel запустить макрос Word. Вот описание макроса Word: Public Sub Start() msgbox &quot;Yes&quot; end sub ...

Макрос, извлекающий реквизиты из документа в Word и вставляющий их в Excel
Здравствуйте, помогите написать макрос, который будет извлекать реквизиты компаний из присланных ими файлов и вставлять в excel каждый в...

Макрос для создания отчета в Word по вычислениям в Excel
Доброго времени суток! Я только только вникаю в VBA (и вообще в программирование как таковое), этакий &quot;самоучка&quot;. Мне...

Макрос для копирование данных из таблицы word на лист excel
Доброго дня. Прошу помощи в написание макроса для извлечение необходимых данных из таблицы word и копирование их на лист excel ...

Макрос для переноса данных в виде таблицы из Excel в Word
Добрый день, помогите пожалуйста довести до ума макрос , который бы экспортировал определенные данные из таблицы в виде таблицы Excel в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru