![]() |
|
|
|
#1
|
|||
|
|||
|
I'm wondering whether it's possible to use VBA to generate automatic table caption based on the section where the table is in (for example there is a document about sales of any kind of vehicle. chapter 3 contains information about car (so the heading is like chapter 3. Car ). Inside this chapter, there is a table about car sales. The caption of the table is generated by reading the heading/the title of the section). I'm trying to put automatic caption on tens of tables in a document. It is not that good if the caption only contains the table number (Table 1, Table 2, etc) without any other information. Thanks in advance. |
|
#2
|
|||
|
|||
|
What you are describing are not "sections." Provided your "Chapter 3. Car" is a paragraph with an outline level 1 e.g., Heading1. Then the following may work:
Code:
Sub ScratchMacro()
'A basic Word macro coded by Greg Maxey
Dim oTbl As Table
Dim oRng As Range, oRngCap As Range
Dim strTitle As String
For Each oTbl In ActiveDocument.Tables
Set oRng = oTbl.Range
Set oRngCap = oTbl.Range
oRng.Collapse wdCollapseStart
oRngCap.Collapse wdCollapseEnd
Do
oRng.MoveStart wdParagraph, -1
oRng.End = oRng.Paragraphs(1).Range.End - 1
strTitle = oRng.Text
Loop Until oRng.Paragraphs(1).OutlineLevel = 1
oRngCap.InsertCaption Label:="Table", TitleAutoText:="", Title:=" - " & strTitle, _
Position:=wdCaptionPositionAbove, ExcludeLabel:=0
Next
lbl_Exit:
Exit Sub
End Sub
|
|
#3
|
||||
|
||||
|
Greg's code always gives you the above Heading 1 text. If you wanted the nearest preceding heading of any level the code could be
Code:
Sub ScratchMacro()
Dim oTbl As Table, oRng As Range, rngHead As Range, strTitle As String
For Each oTbl In ActiveDocument.Tables
Set oRng = oTbl.Range
Set rngHead = oRng.GoTo(What:=wdGoToHeading, Which:=wdGoToPrevious, Count:=1).Paragraphs(1).Range
rngHead.MoveEnd Unit:=wdCharacter, Count:=-1
strTitle = rngHead.Text
oTbl.Range.InsertCaption Label:="Table", Title:=" - " & strTitle, Position:=wdCaptionPositionAbove, ExcludeLabel:=0
Next
End Sub
__________________
Andrew Lockton Chrysalis Design, Melbourne Australia |
|
#4
|
|||
|
|||
|
Thanks Greg, Andrew..
Both codes work like a charm.. |
|
#5
|
|||
|
|||
|
Actually Andrew's code is cleaner ;-). If you really do only want to use a specific heading to fix the table captions (e.g., Heading 1), here is a version which combines his method and mine:
Code:
Sub ScratchMacro()
Dim oTbl As Table, oRngHeading As Range
Dim lngLevel As Long
lngLevel = 1 'This means only Heading 1 Style is used to define table titles.
For Each oTbl In ActiveDocument.Tables
Set oRngHeading = oTbl.Range.GoTo(What:=wdGoToHeading, Which:=wdGoToPrevious, Count:=1).Paragraphs(1).Range
Do Until oRngHeading.Paragraphs(1).OutlineLevel = lngLevel
Set oRngHeading = oRngHeading.GoTo(What:=wdGoToHeading, Which:=wdGoToPrevious, Count:=1).Paragraphs(1).Range
Loop
oRngHeading.MoveEnd Unit:=wdCharacter, Count:=-1
oTbl.Range.InsertCaption Label:="Table", Title:=" - " & oRngHeading.Text, Position:=wdCaptionPositionBelow, ExcludeLabel:=0
Next
lbl_Exit:
Exit Sub
End Sub
|
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
Automatic locking section of document AFTER text typed
|
lou1990lou | Word VBA | 2 | 01-20-2019 02:39 PM |
Automatic table of contents for just one section of document?
|
seanspotatobusiness | Word | 2 | 02-06-2017 07:13 AM |
| section page numbers reverting to following on from previous section after generating index | cloudtrapezer | Word | 1 | 06-25-2015 01:16 AM |
Generating Print Labels Dynamically Based on SQL Server
|
expinch | Word | 1 | 11-26-2014 10:05 PM |
| Automatic table of figures includes one of the figures, not just the caption - help! | sarahlt | Word | 1 | 09-28-2014 09:34 AM |