![]() |
|
|
|
#1
|
|||
|
|||
|
Greetings All!
What I am trying to do is open a MS Word document from Access and then move to a specific heading number (eg 3.4.2.1). The document name and heading number exist in Access, and I have done a simple "open a document" using VBA from Access. Where I am stuck is trying to move to the heading number (in a heading style). I have searched through a lot of documentation, but never found a property that contains the heading number. Any thoughts? Thanks! Don |
|
#2
|
||||
|
||||
|
I don't work in Access, but the principles of opening a document and processing it from VBA are fairly universal and go something like the following code. One way to open at your heading would would be to set a named bookmark at the start of that location (say "bkHeading1") and then select that bookmark e.g.
Code:
Dim wdApp As Object
Dim wdDoc As Object
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If Err Then
Set wdApp = CreateObject("Word.Application")
End If
On Error GoTo 0
Set wdDoc = wdApp.Documents.Open(Filename:="C:\Path\DocName.docx")
wdDoc.Range.bookmarks("bkHeading1").Select
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
#3
|
|||
|
|||
|
Graham,
I had actually considered the bookmark approach based on some articles I saw on using hyperlinks to open a document to a particular place in a document. Unfortunately, the documents exist already and do not have bookmarks. Also, in my hyperlink experiment on a test document with a bookmark, while the hyperlink opened the document, it did not move to the bookmark. Not sure if that is the result of some policy issue. Another avenue I started pursuing was do a text search for the section number to reach the TOC. The figure out how to "Ctl-Click" to jump from the TOC to the desired section. But that seems like a kluge. It amazes me that heading numbers for an open document are not available programmatically. For a comment extraction tool I tried getting heading numbers and could never find a programmatic source. Thanks for the suggestion! Don |
|
#4
|
||||
|
||||
|
Since you know the number (which I assume is part of the heading text), you could use Find in VBA to find that number in the relevant Heading Style. For example:
Code:
Dim wdDoc As Document, StrFnd As String
'insert the code that references the document here
StrFnd = "string from database"
With wdDoc.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Format = True
.Forward = True
.Wrap = wdFindContinue
.MatchWholeWord = True
.Text = StrFnd
.Style = "Heading 1"
.Replacement.Text = ""
.Execute
End With
If .Find.Found = True Then
'do something with the heading
End If
End With
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#5
|
||||
|
||||
|
This following is a function you could use to go to the right heading. You will need to pass in a string and the function will jump to the first heading that contains that string. The string can also be the heading number. Note I included a sub at the end to show how you might call the function.
Code:
Function GoToMyHeading(str As String)
Dim doc As Document
Dim vHeadings As Variant
Dim v As Variant
Dim i As Integer
Set doc = ActiveDocument
vHeadings = doc.GetCrossReferenceItems(wdRefTypeHeading)
i = 0
For Each v In vHeadings
i = i + 1
If InStr(v, str) > 0 Then
Selection.GoTo What:=wdGoToHeading, Which:=wdGoToAbsolute, Count:=i
Exit Function
End If
Next v
MsgBox "Couldn't find the heading containing: " & str
End Function
Sub GoToMyHeading_Test()
GoToMyHeading "3.2.1"
End Sub
__________________
Andrew Lockton Chrysalis Design, Melbourne Australia |
|
#6
|
|||
|
|||
|
Andrew,
Awesome! The GetCrossReferencedItems/wdRefTypeHeading is the key! I need to read up on that a bit more. This might solve another problem for me too! Had to make two minor tweeks to your example code: If InStr(Trim(v), Trim(strTargetHeading)) = 1 Then added the Trim() and set the find location to one. The first test case I ran using "3.1" found "2.3.1". Thanks for the help! Don |
|
#7
|
||||
|
||||
|
That's a good pickup on the need for '=1' when passing in the heading number. As you probably worked out I didn't test it properly. I had thought it would be good to have the function also return hits if you passed in the text from the heading instead of just the number but I guess that was just a little too ambitious.
__________________
Andrew Lockton Chrysalis Design, Melbourne Australia |
|
| Tags |
| heading numbering, search, vba |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
How to Restore Heading 1, Heading 2, etc. within a Word Document
|
cheech1981 | Word | 9 | 01-11-2017 02:14 AM |
Formula to open external file with specific program (like open with)
|
pemartins | Excel | 16 | 02-24-2014 11:39 PM |
Deleting A blank Line that has a specific heading style , word 2010 & 2013
|
SteveWcg | Word | 5 | 01-08-2014 10:37 PM |
Macro to replace one specific heading style with another
|
ubns | Word VBA | 44 | 09-04-2012 08:17 PM |
Using Hyperlink to open Word Document at Specific Header
|
rossi45 | Word | 2 | 05-04-2012 06:03 PM |