![]() |
|
#1
|
|||
|
|||
|
I have the below requirement. I have a input similar to this
# Drawings Drawing Type 1 Drawing 4, Drawing 27 EC, C Now I would like to have the output similar to this # Drawings Drawing Type 1 Drawing 4 EC 2 Drawing 27 C Can some expert help me with this I found the following piece of code written on one of the forum and thought would be of help to me. Code:
Sub TableSplitter()
Application.ScreenUpdating = False
Dim Tbl As Table, RngFnd As Range, StrFindTxt As String
StrFindTxt = InputBox(",")
If Trim(StrFindTxt) = "" Then Exit Sub
For Each Tbl In ActiveDocument.Tables
Set RngFnd = Tbl.Range
With RngFnd.Find
.ClearFormatting
.Text = StrFindTxt
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute
With RngFnd.Duplicate
'The next two lines break the table *after* the found row
If .Cells(1).RowIndex < .Tables(1).Rows.Count Then
.Tables(1).Split .Cells(1).RowIndex + 1
End If
'The next two lines break the table *before* the found row
If .Cells(1).RowIndex > 1 Then
.Tables(1).Split .Cells(1).RowIndex
End If
.Collapse (wdCollapseEnd)
End With
Loop
End With
Next
Set RngFnd = Nothing
Application.ScreenUpdating = True
End Sub
Last edited by macropod; 03-07-2016 at 10:31 PM. Reason: Added code tags & formatting |
|
#2
|
||||
|
||||
|
Hi nachiketapte,
It would be easier to understand you needs if you attached an actual document to a post containing tables showing the before & after requirements. You do this via the paperclip symbol on the 'Go Advanced' tab at the bottom of this screen. As for the macro included with your post, it's written for splitting tables, not cells. PS: When posting code, please use the code tags, indicated by the # button on the posting menu.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#3
|
|||
|
|||
|
Quote:
|
|
#4
|
||||
|
||||
|
It's impossible to discern the cell content & table structure from your post, so it's not possible at this stage to write a macro to do the processing. We don't need to see your 'live' document, just a sample document showing an actual before & after table using, say, the sample data in your post, to show what the macro is supposed to do.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#5
|
|||
|
|||
|
uploaded for your reference
|
|
#6
|
||||
|
||||
|
Although there are two tables in your document, neither of them appears to show how what you apparently want the first one reformatted.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#7
|
|||
|
|||
|
Quote:
1 Drawing4 EC 2 Drawing27 C I hope I have made myself clear |
|
#8
|
||||
|
||||
|
Quote:
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#9
|
||||
|
||||
|
Try the following macro. Do be aware that your current table's Drawing 4, Drawing 27 & EC, C content is actually supplied via DOCPROPERTY fields pointing to properties named drawing_id and drawing_tmpl_type, respectively. Those fields cannot survive the restructuring.
Code:
Sub ReformatTables()
Dim t As Long, i As Long, StrDrwgs As String, StrTypes As String
With ActiveDocument
For t = .Tables.Count To 1 Step -1
With .Tables(t)
If Trim(Split(.Cell(1, 2).Range, Chr(13))(0)) = "Drawings" Then
StrDrwgs = Trim(Split(.Cell(2, 2).Range, Chr(13))(0))
StrTypes = Trim(Split(.Cell(2, 3).Range, Chr(13))(0))
For i = 1 To UBound(Split(StrDrwgs, ","))
With .Rows.Last.Range
.Next.InsertBefore vbCr
.Next.FormattedText = .FormattedText
End With
With .Rows.Last.Range
.Cells(1).Range.Text = i + 1
.Cells(2).Range.Text = Trim(Split(StrDrwgs, ",")(i))
.Cells(3).Range.Text = Trim(Split(StrTypes, ",")(i))
End With
Next
With .Rows(2).Range
.Cells(1).Range.Text = 1
.Cells(2).Range.Text = Trim(Split(StrDrwgs, ",")(0))
.Cells(3).Range.Text = Trim(Split(StrTypes, ",")(0))
End With
End If
End With
Next
End With
End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#10
|
|||
|
|||
|
Many thanks. It worked.
Assuming we have a table with 5 columns out of which column 2,3,4 are columns having comma separated values which is the 2nd table in my document attached. How do we achieve the same. Last edited by macropod; 03-08-2016 at 03:38 AM. Reason: Deleted unneccessary quote of entire post replied to. |
|
#11
|
||||
|
||||
|
It would have been helpful had you specified your requirements in full from the outset. Try:
Code:
Sub ReformatTables()
Dim t As Long, i As Long, StrDrwgs As String, StrTypes As String
Dim StrEngineer As String, StrTED As String, StrTPD As String, Rng As Range
With ActiveDocument
For t = .Tables.Count To 1 Step -1
With .Tables(t)
If Trim(Split(.Cell(1, 2).Range, Chr(13))(0)) = "Drawings" Then
StrDrwgs = Trim(Split(.Cell(2, 2).Range, Chr(13))(0))
StrTypes = Trim(Split(.Cell(2, 3).Range, Chr(13))(0))
For i = 1 To UBound(Split(StrDrwgs, ","))
With .Rows.Last.Range
.Next.InsertBefore vbCr
.Next.FormattedText = .FormattedText
End With
With .Rows.Last.Range
.Cells(1).Range.Text = i + 1
.Cells(2).Range.Text = Trim(Split(StrDrwgs, ",")(i))
.Cells(3).Range.Text = Trim(Split(StrTypes, ",")(i))
End With
Next
With .Rows(2).Range
.Cells(1).Range.Text = 1
.Cells(2).Range.Text = Trim(Split(StrDrwgs, ",")(0))
.Cells(3).Range.Text = Trim(Split(StrTypes, ",")(0))
End With
End If
If Trim(Split(.Cell(1, 2).Range, Chr(13))(0)) = "Project Engineer" Then
.Split .Rows.Count
StrEngineer = Trim(Split(.Cell(2, 2).Range, Chr(13))(0))
StrTED = Trim(Split(.Cell(2, 3).Range, Chr(13))(0))
StrTPD = Trim(Split(.Cell(2, 4).Range, Chr(13))(0))
For i = 1 To UBound(Split(StrEngineer, ","))
With .Rows.Last.Range
.Next.InsertBefore vbCr
.Next.FormattedText = .FormattedText
End With
With .Rows.Last.Range
.Cells(2).Range.Text = Trim(Split(StrEngineer, ",")(i))
.Cells(3).Range.Text = Trim(Split(StrTED, ",")(i))
.Cells(4).Range.Text = Trim(Split(StrTPD, ",")(i))
End With
Next
With .Rows(2).Range
.Cells(2).Range.Text = Trim(Split(StrEngineer, ",")(0))
.Cells(3).Range.Text = Trim(Split(StrTED, ",")(0))
.Cells(4).Range.Text = Trim(Split(StrTPD, ",")(0))
End With
.Range.Characters.Last.Next.Delete
End If
End With
Next
End With
End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
split row of cells at semicolon
|
lbeck | Excel | 8 | 06-06-2015 01:55 PM |
| how to split merged data into vertical saperate cells | cheekugreat | Excel | 5 | 10-11-2014 05:53 AM |
| Macro to loop through all cells in a table produced by a mail merge | elh52 | Word VBA | 4 | 08-31-2014 10:50 PM |
| Losing rows when pasting split cells | Gitley | Word Tables | 1 | 01-15-2013 07:49 AM |
Macro to Merge Cells Row By Row in a Table
|
KD999 | Word VBA | 4 | 02-20-2012 08:51 PM |