Word. Преобразование таблиц

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Существуют документ Word в него из экселя вставляется таблица с одним столбцом объединённым из 8столбцов и 8 столбцов.( см файл до преобразования.doc)

С помощью преоброзований в ручную получаю следующее ( см файл после преобразования.doc) с помощью записанных макросов :
1) Разделение таблиц : Selection.InsertBreak Type:=wdPageBreak

2) В ручную таблицы с одним столбцом преобразуются в текст : Selection.Rows.ConvertToText Separator:=wdSeparateByTabs, NestedTables:= True

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

Код: Выделить всё

Sub AllTblsToText()
'все таблицы в текст
Dim tbl As Table
For Each tbl In ActiveDocument.Tables
   tbl.ConvertToText (wdSeparateByParagraphs)
Next tbl
End Sub
Вопрос:
1) Нужен макрос, который циклично найдёт строки начинающиеся на "Расчёт", "63", "L" и применит макрос Selection.InsertBreak Type:=wdPageBreak - т. е. разделит одну таблицу на несколько таблиц.

2) далее нужно, что бы макрос все таблицы , где один столбец выделил и преобразовал в текст с помощью Selection.Rows.ConvertToText Separator:=wdSeparateByTabs, NestedTables:= True.
а таблицы, где 8 столбцов сохраняются.
Спасибо заранее ...
С уважением....
Вложения
вопрос.zip
(17.15 КБ) 33 скачивания
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Ну очень прошу в VBA Worde не селён...
Макрорекордером кусочки макросов собрал циклический поиск по условию и формирование таблиц не получается...
Хотя бы ссылку дайте на др. источник...
С уважением..
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Попробуйте вот это

Код: Выделить всё

Sub a()
  Dim T As Rows, R As Row, Rws() As Row, r1 As Range
  Set T = ThisDocument.Tables(1).Rows
  n = T.Count
  ReDim Rws(n)
  For i = 1 To n
    Set Rws(i) = T(i)
  Next
  For i = 1 To n
    With Rws(i)
      If .Range.Text Like "Расч*" Then .Range.InsertBreak wdPageBreak
      If .Cells.Count = 1 Then .ConvertToText
    End With
  Next
End Sub
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Naeel Maqsudov
Очень выручили ...
С уважением....
Ответить