If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below. |
|
|
|
Thread Tools | Display Modes |
#1
|
|||
|
|||
How can I retrieve the format of a header reference?
Hi All,
I'm learning, little by little. I know that I can reference the text that a cross reference field shows in the doc with: strCode1 = oRg.Fields(1).Result.Text Now, I'd like to be able to return the style of the header that the cross-reference field refers to. For example, I search and find a cross reference to a header. The code line above returns "Rubber Chickens." In the document, Rubber Chickens' style is 'Heading 2'. Can I, in VB code, get "Rubber Chickens" by way of the cross-reference field? I tried: strCode2 = oRg.Fields(1).Result.Style Of course, that gave me the style of the cross-reference field, not the heading it refers to (as I wish). Thanks for the help, Max |
#2
|
|||
|
|||
When you insert a cross-reference to a heading, Word creates a hidden
bookmark for that heading. This is the _Ref12345678 part of your REF field code. (The leading underscore is what makes it a hidden bookmark. You can see these on the Bookmarks dialog by checking the 'Hidden Bookmarks' checkbox.) You can use this _Ref code to retrieve the heading itself, and thus its style and other properties -- Dim pRef as string : pRef = mid$(oRg.Fields(1).Code, 6, 13) ActiveDocument.Bookmarks.ShowHidden = TRUE pStyle = ActiveDocument.Bookmarks(pRef).Range.Style The Mid$() finction is dubious here -- it would be more reliable to use Split() or Instr() to extract the reference. "Max Moor" wrote in message . 16... Hi All, I'm learning, little by little. I know that I can reference the text that a cross reference field shows in the doc with: strCode1 = oRg.Fields(1).Result.Text Now, I'd like to be able to return the style of the header that the cross-reference field refers to. For example, I search and find a cross reference to a header. The code line above returns "Rubber Chickens." In the document, Rubber Chickens' style is 'Heading 2'. Can I, in VB code, get "Rubber Chickens" by way of the cross-reference field? I tried: strCode2 = oRg.Fields(1).Result.Style Of course, that gave me the style of the cross-reference field, not the heading it refers to (as I wish). Thanks for the help, Max |
#3
|
|||
|
|||
"Jezebel" wrote in
: When you insert a cross-reference to a heading, Word creates a hidden bookmark for that heading. This is the _Ref12345678 part of your REF field code. (The leading underscore is what makes it a hidden bookmark. You can see these on the Bookmarks dialog by checking the 'Hidden Bookmarks' checkbox.) You can use this _Ref code to retrieve the heading itself, and thus its style and other properties -- Dim pRef as string : pRef = mid$(oRg.Fields(1).Code, 6, 13) ActiveDocument.Bookmarks.ShowHidden = TRUE pStyle = ActiveDocument.Bookmarks(pRef).Range.Style The Mid$() finction is dubious here -- it would be more reliable to use Split() or Instr() to extract the reference. Split(oRg.Fields(1).Code)(2) it is. Once again, thanks for the help. I know that once this code is working, it will repeatedly save me hours of time over the years. As I found with Access, you MVPs make the learning curve so much more bearable. - Max |
#4
|
|||
|
|||
Max
I have been following your posts to try to pick up tips. I just started dabbling in Word VBA are year or so ago and still have lots to learn. How did you ever figure out to use the "(2)'" at the end of the Split statement to return the value that you wanted? I searched the VBA help and found no similiar example. Is this something that you knew from your experience in other programs? |
#5
|
|||
|
|||
Jezebel,
Please enlighten. How would you use Instr to return the reference? |
#6
|
|||
|
|||
"Greg" wrote in news:1116245707.750799.283430
@g47g2000cwa.googlegroups.com: Max I have been following your posts to try to pick up tips. I just started dabbling in Word VBA are year or so ago and still have lots to learn. How did you ever figure out to use the "(2)'" at the end of the Split statement to return the value that you wanted? I searched the VBA help and found no similiar example. Is this something that you knew from your experience in other programs? Hi Greg, Yes, I knew that from my Access trials. Split returns a string array, and the (2) is just an index to it... a shortcut, since I only care about the '_Refxxx' anyway. More often than not, I'd declare a variable to dump the array into: Dim avarOpenArgs As Variant If (Not IsNull(Me.OpenArgs)) Then avarOpenArgs = Split(Me.OpenArgs, "\") ... -TTFN |
#7
|
|||
|
|||
"Greg" wrote in news:1116247564.625166.297570
@g43g2000cwa.googlegroups.com: Jezebel, Please enlighten. How would you use Instr to return the reference? I'll have a go (someone else will make a prettier one) strRef = Mid$(oRg.Fields(1).Code, InStr(oRg.Fields(1).Code, "_Ref"), 13) The only thing I don't like is the hard coded '13'. Does anyone know a pre-defined system constant for a hidden bookmark length? For that matter, is 13 even guaranteed? -Max |
#8
|
|||
|
|||
Max,
Thanks. When I saw it, I figured immediately that it was an index value. I just couldn't figure out how you came upon using it. I have been using this new gained knowlegde to play around with some code for rearranging a list of names: Sub Test() Dim oPara As Word.Paragraph Dim oRng As Word.Range Dim pRef0 As String Dim pRef1 As String Dim pRef2 As String Dim pRef3 As String Dim pRef4 As String Dim i As Long For Each oPara In ActiveDocument.Paragraphs Set oRng = oPara.Range oRng.MoveEnd wdCharacter, -1 i = UBound(Split(oRng)) + 1 Select Case i Case Is 1 pRef1 = Split(oRng)(0) pRef2 = Split(oRng)(1) Select Case i Case Is 3 oRng.Text = pRef2 & ", " & pRef1 Case Is 4 pRef3 = Split(oRng)(2) If InStr("SR.Sr.JR.Jr.IIIVIII", pRef3) 0 Then oRng.Text = pRef2 & ", " & pRef1 & ", " & pRef3 Else oRng.Text = pRef3 & ", " & pRef1 & " " & pRef2 End If Case Is = 4 pRef3 = Split(oRng)(2) pRef4 = Split(oRng)(3) If InStr("SR.Sr.JR.Jr.IIIVIII", pRef4) 0 Then oRng.Text = pRef3 & ", " & pRef1 & " " & pRef2 _ & ", " & pRef4 Else oRng.Text = pRef4 & ", " & pRef1 & " " & pRef2 _ & " " & pRef3 End If Case Else MsgBox oRng & " contains too many elements" _ & " for this procedure to rearrange." End Select Case Else End Select Next End Sub I should change the variable names, but it seems to work pretty good for rearranging names into from First Name, MI, Last Name, Suffix to Last Name, First Name MI, Suffix |
#9
|
|||
|
|||
Max,
If Mid$ is buggy in the method Jezebel provided, it seems it would be even buggier here :-) |
#10
|
|||
|
|||
Mid$() is buggy in the code I provided because the start and end points were
assumed. (I was just using a shortcut for the sake of example. Using Instr() establishes the starting point reliably. As Max points out the 13 is also dubious -- the hidden bookmarks I've seen always seem to be that length, but since the number is obviously random, I wouldn't rely on it. Better would be to do a second Instr() to find the first space that follows the _Ref. But Split() is a simpler approach. "Greg" wrote in message oups.com... Max, If Mid$ is buggy in the method Jezebel provided, it seems it would be even buggier here :-) |
|
Thread Tools | |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Is right justification for a Page Header accepted business format | Trying to Please | General Discussion | 1 | May 23rd, 2005 04:32 PM |
format the "date" button for a header | sc11 | General Discussion | 1 | May 12th, 2005 03:48 AM |
Header formatting in LINKed docs not working | Dennis | Page Layout | 4 | July 5th, 2004 10:04 AM |
Mail Rules on Email Header | Stever | Outlook Express | 13 | June 26th, 2004 09:26 PM |
email format | Lloyd | General Discussion | 1 | June 16th, 2004 03:42 AM |