Convert table to text -> Convert text to tableтолько утомительно в каждой ячейке запускать....
Convert table to text -> Convert text to table - [Объединить ячейки в каждом столбце] - Convert table to text -> Convert text to table
С подачи @LinxyХотелось найти решение в Ворде и для всего файла сразу
Sub ParagraphRow()
Application.ScreenUpdating = False
Dim Tbl As Table, r As Long, c As Long, bFnd As Boolean
1:
For Each Tbl In ActiveDocument.Tables
With Tbl
For r = .Rows.Count To 1 Step -1
With .Rows(r).Range.Find
.Text = " "
.Replacement.Text = ""
.Execute Replace:=wdReplaceAll
.Text = "^p"
.Execute
bFnd = .Found
End With
If bFnd = True Then
.Rows.Add .Rows(r)
For c = 1 To .Columns.Count
If .Cell(r + 1, c).Range.Paragraphs.Count > 1 Then
.Cell(r, c).Range.Text = Split(.Cell(r + 1, c).Range.Text, vbCr)(0)
.Cell(r + 1, c).Range.Paragraphs(1).Range.Text = vbNullString
End If
Next
End If
Next
'End With
End With
Next
If bFnd = True Then GoTo 1
Application.ScreenUpdating = True
End Sub
Да блин, уже попросил @Linxy заменить на верный вариант Но она пока не заходилаГм.... что-то он все пробелы убирает в тексте....
.Text = " "
.Replacement.Text = ""
Дима, я пока с телефона и редактировать очень неудобно. Можешь просто запостить рабочий итоговый вариант новым сообщением?Да блин, уже попросил @Linxy заменить на верный вариант
Теперь уже после того как @RIKITIKI его погоняет и поправлю что будет глючитьМожешь просто запостить рабочий итоговый вариант новым сообщением
Sub ParaTabSplitter()
For Each t In ActiveDocument.Tables
For Each R In t.Rows
rr = 1
For Each cl In R.Cells
tmp = cl.Range.Paragraphs.Count
If rr < tmp Then rr = tmp
Next cl
If rr > 1 Then
For Each cl In R.Cells
txts = Split(cl.Range.Text, vbCr)
cl.Split rr
For i = 1 To UBound(txts)
cl.Column.Cells(i).Range.Text = txts(i - 1)
Next i
Next cl
End If
Next R
Next t
End Sub
Не хотел особо переделывать Но таки да, нужно просто переписать его полностьюGoTo меня несколько удивил
Чуток загорожено, но не наблюдаю 3-х колонок в самой первой строке "- N -", имхо, там второй и третий столбец скомбинированы.там нет комбинированных...
если добавляю строку On Error Resume Next - создаёт пустые ячейки
Sub ParaTabSplitter()
Dim r As Row, cl As Cell, t As Table
On Error Resume Next
For Each t In ActiveDocument.Tables
For Each r In t.Rows
rr = 1
For Each cl In r.Cells
tmp = cl.Range.Paragraphs.Count
If rr < tmp Then rr = tmp
Next cl
If rr > 1 Then
r.Cells.Split rr
For Each cl In r.Cells
txts = Split(cl.Range.Text, vbCr)
For i = 0 To UBound(txts) - 1
t.Cell(r.Index + i, cl.ColumnIndex).Range.Text = txts(i)
Next i
Next cl
End If
Next r
Next t
End Sub