Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/27: Рейтинг темы: голосов - 27, средняя оценка - 4.67
-1 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 75
1

Редактирование таблиц в WOrD

30.05.2011, 17:34. Показов 5621. Ответов 6
Метки нет (Все метки)

Как можно уменьшить время форматирования таблиц ? В данный момент макрос перебирает каждую строку, хотя необходимо, чтобы производилось отдельное форматирование только первой и второй строки, если объединены ячейки, а форматирование остальной таблицы производилось не по каждой строке .. А то времени очень много занимает ..... СПАСИБО ОгРомНОЕ !!!!

Вот исходный код :
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
Sub Change_Table_Formatting(Tbl As Word.Table)
    Tbl.Select
    With Tbl
        .Style = "Format"
    End With
    Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
    Selection.Rows.AllowBreakAcrossPages = False
    
     For Each oTable In ActiveDocument.Tables
        oTable.Rows.WrapAroundText = False
         oTable.AutoFitBehavior (wdAutoFitWindow)
          oTable.Rows.HeightRule = wdRowHeightAuto
          
    Next
          With Selection.Font
        .Name = "Arial"
        .Size = 9
        .Color = wdColorAutomatic
    End With
        Tbl.Cell(1, 1).Select
        Selection.SelectRow
    With Selection.Range.Font
 .Color = wdColorWhite
   .Name = "Arial"
.Bold = True
.Size = 9
.AllCaps = False
End With
 
    With Options
        .DefaultBorderColor = wdColorAutomatic
    End With
End Sub
 
Public Sub Format_Tables()
  Dim Table As Word.Table
  For Each Table In ActiveDocument.Tables
    Call Change_Table_Formatting(Table)
  Next Table
End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2011, 17:34
Ответы с готовыми решениями:

Word: макрос для таблиц. Отформатировать определенный вид таблиц
В документе два вида таблиц. Первый тип таблиц имеет вертикальную шапку сбоку (левый столбец) и...

Редактирование документа word
Доброго дня, в цикле создается n-документов word, мне необходимо эти документы не создавать по...

Поиск и редактирование текста в Word
Народ, помогите со следующей проблемкой. Пытаюсь написать код в VBA для обработки документа....

Пакетное редактирование файлов Word
Всем привет. В сети нашел файл SrcAndRpl_Beta3.doc для пакетного найти/заменить. Работает...

__________________
6
5543 / 1348 / 148
Регистрация: 08.02.2009
Сообщений: 4,081
Записей в блоге: 30
30.05.2011, 19:39 2
А сколько занимает времени?
0
-1 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 75
31.05.2011, 10:21  [ТС] 3
В зависимости от количества таблиц, ориентировочно 40 таблиц обрабатываются минут 20 - 30.
0
241 / 51 / 6
Регистрация: 05.08.2010
Сообщений: 222
31.05.2011, 10:43 4
попробуй без селектов и с отключенным обновлением экрана
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
Sub Change_Table_Formatting(Tbl As Word.Table)
    Application.ScreenUpdating = False
    With Tbl
       .style = "Format"
       .ParagraphFormat.Alignment = wdAlignParagraphLeft
       .Rows.AllowBreakAcrossPages = False
    End With
    For Each oTable In ActiveDocument.Tables
        oTable.Rows.WrapAroundText = False
        oTable.AutoFitBehavior (wdAutoFitWindow)
        oTable.Rows.HeightRule = wdRowHeightAuto
    Next
    With Tbl.Font
        .name = "Arial"
        .size = 9
        .color = wdColorAutomatic
    End With
    
    
    With Tbl.cell(1, 1).EntireRow.Range.Font
        .color = wdColorWhite
        .name = "Arial"
        .bold = True
        .size = 9
        .Allcaps = False
    End With
    With Options
        .DefaultBorderColor = wdColorAutomatic
    End With
    Application.ScreenUpdating = True
End Sub
 
Public Sub Format_Tables()
    Dim Table As Word.Table
    For Each Table In ActiveDocument.Tables
        Call Change_Table_Formatting(Table)
    Next Table
End Sub
как то так наверное, не уверен насчет
Visual Basic
1
Tbl.cell(1, 1).EntireRow.Range.Font
, в ворде не работаю
0
-1 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 75
31.05.2011, 11:16  [ТС] 5
Нет не работает ... Все равно требует SELect
0
241 / 51 / 6
Регистрация: 05.08.2010
Сообщений: 222
31.05.2011, 15:32 6
Цитата Сообщение от Tinoo Посмотреть сообщение
Нет не работает ... Все равно требует SELect
тогда попробуй просто
Visual Basic
1
2
Application.ScreenUpdating = False
Application.ScreenUpdating = True
в начале и конце саба
должен быть прирост в производительности
0
Заблокирован
01.06.2011, 17:50 7
Код:
Visual Basic
1
2
3
4
5
6
Public Sub Format_Tables()
Dim Таблица As Word.Table
For Each Таблица In ActiveDocument.Tables
    Call Change_Table_Formatting(Таблица)
Next Таблица
End Sub
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
Sub Change_Table_Formatting(Таблица As Word.Table)
'Добавить выравнивание по левому краю в сам стиль.
'Добавить "разрешить перенос строк на следующую страницу" в сам стиль.
With Таблица
    .Style = "Светлая заливка - Акцент 1"
End With
'Можете из нижеперечисленного тоже добавить в стиль (раз вы его используете).
With Таблица
    .Rows.WrapAroundText = False
    .AutoFitBehavior (wdAutoFitWindow)
    .Rows.HeightRule = wdRowHeightAuto
    With .Range.Font
        .Name = "Arial"
        .Size = 9
        .Color = wdColorAutomatic
    End With
End With
'Проверки, что ячейки объединены, нет
'(а в теме пишите про объединённые ячейки).
Таблица.Cell(1, 1).Select
Selection.SelectRow
With Selection.Range.Font
    .Color = wdColorWhite
    .Name = "Arial"
    .Bold = True
    .Size = 9
    .AllCaps = False
End With
With Options
    .DefaultBorderColor = wdColorAutomatic
End With
End Sub


Замечания по вашему коду:
  1. Нельзя назначать переменным имена объектов, которые есть в Word. В вашем случае нельзя использовать переменную Table, потому что есть такой объект Table. Это связано с тем, что VBA может воспринять переменную не как переменную, а как объект.
  2. Такого в вашем коде не было.
    В данный момент макрос перебирает каждую строку
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2011, 17:50

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

Редактирование таблиц как в Word
Подскажите пожалуйста с помощью чего можно реализовать создание и редактирование таблиц в c#...

Редактирование таблиц WORD через DELPHI
Ребзя, всем привет! Помогите, кто знает!Как сделать невидимыми границы ячеек которые я обвёл на...

Редактирование произвольной таблицы, если ряд полей таблиц содержит коды объектов из других таблиц
Уважаемые, Гуру! Хотелось бы построить редактор произвольной таблицы БД. Загрузка таблицы "select...

Редактирование таблиц
Здраствуйте, подскажите пожалуйсто, я создаю таблицу <table border="0" cellspacing="0"...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.