Grabbing an Outline Heading

M

MarsBar

In an outline numbered document, does the body text know anything
about the outline section in which it appears? I have an outline
numbered document and want to create a macro tol capture certain text
from the body, and in the front of the text, I want to put the level 3
outline heading of the section where the text appears. For example:

1. My House
A. Furniture
(1) Living Room
Coffee table
Sofa
Chair
End Table
(2) Kitchen
Dining Table
Chairs
B. Books
(1) Computer
ASP.Net Coding Strategies
Pivot Table Data Crunching
(2) Philosophy
Kitchen Table Wisdom
This was Cicero

The individual items are just body text.

Suppose I want to gather up a list of all the "tables", precede each
one with the room where it appears, and paste it into a second
document. The result would look like this:

Living Room: Coffee table
Living Room: End Table
Kitchen: Dining Table
Computer: Pivot Table Data Crunching
Philosophy: Kitchen Table Wisdom

I want to search for the word "table," select and copy that line, and
then grab the appropriate heading and stick it on the front, without
ever actually selecting and copying the heading. Is it possible?
 
J

Jezebel

What you're after is certainly do-able in principle; but quite a lot of
work, and there are, in any case, any number of applications already around
that do exactly what you describe.

To do it in Word, you need to parse the document and build a data structure
that can be searched in the way you need.

You could maybe do it in Excel using pivot tables. You can certainly do it
using just about any database application you can find (and there are plenty
of free ones out there). You could even use an object editor like protege
(also free).
 
M

MarsBar

I'm afraid I oversimplified my example. The Word document I'm working
with is a lot more complex than I described. It wouldn't neatly fit
into a database structure. Each "Level 3" is actually a detailed
description of a web page, complete with screen shot, tables, event
descriptions, and data access. Out of that whole mess, I just want to
pluck every line that starts with "Stored Procedure Name:" and paste
that line into a new document, along with the name of the screen where
it appears. (The screen name is the Level 3 Heading).

Here is how I'm doing it now:

Start at the top
Go to the next heading
If that heading isn't level 3, go to the next heading.
If it IS level 3, then:
1) Select the heading text and assign it to strCurrentHeading.
2) Select the whole body under this heading and paste it into a new
screen, call it TempScreen1.
Then search TempScreen1 for "Stored Procedure Name:" Select that whole
line and paste it into a third document, call it StoredProcList.doc,
preceded by strCurrentHeading.
Keep doing that until "Stored Procedure Name:" isn't found.
Then erase everything from TempScreen1 and go back to the main
document and find the next level 3 heading.
Repeat until there are no more headings.

The problem is, it's messy and prone to error, especially the bit
about selecting the whole section. Here's how I want to do it:
Start at the top
Search for "Stored Procedure Name:"
Determine the Selection.Level3HeadingName and assign it to
strCurrentHeading.
Select the whole line and copy it.
Switch to StoredProcList.doc. Paste in strCurrentHeading and the name
of the stored procedure.
Switch back to main document, lather, rinse, repeat.

That would work beautifully, assuming that something like
Selection.Level3HeadingName exists. Does it?
 
J

Jezebel

You could do it like this --

1. Iterate the paragraphs of the document.
2. If the paragraph is a level-3 heading, save it strCurrentHeading.
3. Else if the paragraph begins "Stored Procedure Name:", write
strCurrentHeading & paragraph range into your second document
4. Ignore all other paragraphs
 
M

MarsBar

Very nice. That will work. Thanks.

(But I'd still like to have something like
Selection.CurrentOutlineHeading, if any Word develoopers are
listening.)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top