3
votes

I'm trying to add a cross reference into a SEQ field.
My document contains "point headings" which means that between two heading elements, the user can add an extension (between 1.1 and 1.2 may be 1.1A, 1.1B, ...)

Here is how the point heading code looks like:
{STYLEREF "HEADING 2" \N}{SEQ "HEADING 2 POINT" \* ALPHABETIC \S 2}
Which results with: 1.1A

I want to be able to do a cross reference into the point heading.
While I can set the reference type into 'Heading' I can't find out how to reference it to a custom element.

Searching through the web did not reveal any solution but some clues that it might be possible:

  • This website which explains cross-reference formatting, contains an image with custom type (My New Caption).
  • Microsoft DOC's description for ReferenceType is: The type of item for which a cross-reference is to be inserted. Can be any WdReferenceType or WdCaptionLabelID constant or a user defined caption label.

My client is used to work with the cross reference dialog box hence I prefer this approach, but VBA script will also be appreciated.

Thanks!

Update:

I'll try to describe my constraints and environment.
Headings 1-9 are used inside Multi-Level list item, hence they have custom styling.
They cannot be changed.

For a specific task, which is described and answered here, I've created what I call 'Point Headings'.
'Point Headings' are basically an extension that the user can add in between the Multi-Level numbering with a VBA macro.
Let's say that I have two Heading 2 items (1.1, 1.2), the user can add 1.1A, followed by 1.1B and so on.
The user can add point headings from level 2 up to level 5.
Their style is 'Heading 2 Point', 'Heading 3 Point' and so on, and each one is based on its relevant Heading.

As described above, eventually in the document, the word field has the following structure: {STYLEREF "HEADING 2" \N}{SEQ "HEADING 2 POINT" \* ALPHABETIC \S 2}.

My goal is to be able to cross reference into these items, but they do not appear in the Heading type, well because they are not of style Heading.

I wish to be able to create a custom reference type, which will show these items.

3
Do your documents use Heading 3?freeflow
You can cross-reference bookmarks. Bookmarking the content (fields) you want to cross-reference might be a possibility. "Under the covers" Word adds bookmarks to Headings and other things it cross-references automatically.Cindy Meister
@StevenLaycock Yes. The point headers are of style 'Heading 3 Point' and are in between two Heading 3 (or any other heading)nafarkash
@CindyMeister I'm looking for something that the user won't need to work for. Adding by myself a bookmark for each inserted point header is a tedious work which I think is hard to maintain. If the only option is from VBA code then it's OK as well.nafarkash
We may be at cross purposes. Your original posts suggest that you are using the Style 'Heading 2' and then augmenting this style by adding a sequence field. You may just be able to use heading heading styles only. e.g. defining 'Heading 3' to have a numbering sequence of X.XA. Its relatively easy to setup the heading styles to use customised numbering schemes. You then get the ability to use the cross reference dialog, TOC etc.freeflow

3 Answers

3
votes

After some research, here is my answer. Hopefully it will help some future viewers.

Private Sub createPointHeader(pointLevel As Integer, Optional appendixPrefix As String = "")
Dim sQuote As String, referencedStyle As String, captionName As String
sQuote = Chr(34)
referencedStyle = appendixPrefix & "Heading " & pointLevel
captionName = referencedStyle & " Point"
With Selection
    .Fields.Add .Range, wdFieldEmpty, "StyleRef " & sQuote & referencedStyle & sQuote & " \n", False
    .Collapse wdCollapseEnd
    CaptionLabels.Add (captionName)
    .InsertCaption Label:=captionName, ExcludeLabel:=True
    ' Select the created field
    .MoveLeft Count:=1, Extend:=True
    ' Replace the syntax from Arabic to Alphabetic
    .Fields.ToggleShowCodes
    With .find
        .Text = "ARABIC"
        .Forward = False
        .Wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchKashida = False
        .MatchDiacritics = False
        .MatchAlefHamza = False
        .MatchControl = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute
        If .Found = True Then
            Selection.Range.Text = "ALPHABETIC \s " & pointLevel
        End If
    End With

    .Fields.ToggleShowCodes
    .Fields.Update
    .MoveRight Count:=1
    .InsertAfter vbTab
    .Collapse wdCollapseEnd
    ' Apply style after .InsertCaption, because it changes the style to Caption
    .Style = ActiveDocument.Styles(referencedStyle & " Point")
    End With
End Sub

Few remarks

  • I have two styles to base upon: Heading (2-5), and Appendix Heading (2-5). This is the reason for the optional appendixPrefix as a sub variable.
  • CaptionLabels.Add as I've checked can get the same value. No need to check in advance if it already exists.
  • Selection.InsertCaption automatically changes the style into Caption. This is why I apply the style change at the end.

The result

  • Here is how Point Heading 2 looks like:
    {STYLEREF "HEADING 2" \N"}{SEQ HEADING_2_POINT \* ALPHABETIC \S 2}

  • Snapshot of the document with the point headings Point Headings example

  • And finally, as requested, cross reference to the Point headings from the Cross reference box Cross reference dialog box

1
votes

The question asks how to create a cross reference to a custom reference type. I suspect this answer may actually respond to what the original asker might have been getting at.

The idea is to use custom caption labels. A custom caption label appears (ideally) in the Insert/Cross Reference dialog.

A custom caption label is created when you say Insert/Caption and then ask to add a new custom label.

If you have added a custom caption label yourself in a given document, then it automatically appears as a choice when you say Insert/Cross Reference ...

However a difficulty arises when you are given a document where someone else has already added the cross reference type and you want to edit it (by adding additional cross references to the given type of caption). The secret here is to add the custom caption label yourself (even though it already exists), by creating a new temporary caption with the custom label type. You can then go ahead and delete the temporary caption, but you will from then on be able to add cross references to that caption type.

I use this when I want to make reference to 'Code Snippets' or 'Boxes' or 'Algorithms'.

0
votes

I'm taking the chance of responding as an answer rather than as a comment as the reply is longish but hopefully should get you going in the right direction.

I think you have been led down the wrong path by the point pages article you have referenced.

I'm assuming that we can't modify the styles 'Heading 1' to 'Heading 9'. If you can then you will be able to adapt the suggestion below to use with only 'Heading 1' to 'Heading 9' styles.

You will need to create some new styles. I've used the following styles

Name                   Based on Style  Outline level

Heading Point 1        Heading 1          1  
Heading Point 2        Heading 2          2  
Heading Point 2 Ext    Heading 2          3
Heading Point 3        Heading 3          4
Heading Point 3 Ext    Heading 3          5
Heading Point 4        Heading 4          6
Heading Point 4 Ext    Heading 4          7
Heading Point 5        Heading 5          8
Heading Point 5 Ext    Heading 5          9

Please note that getting the outline level correct is important for Heading numbering.

Next create a new Multilevel list. Call the list 'PointNumbering' (Because if you do this you can identify the list by the name in VBA should you need this facility). Link the styles 'Heading Point 1' to 'Heading Point 5 Ext' to levels 1 to 9 of the numbering sequence (e.g. Outline level 1 matches level 1 in the numbering sequence etc).

Turn off the legal style numbering for each level otherwise we won't be able to use Alphabetic numbering. Set the numbering scheme as indicated below.

Level Number style    format levels*   Final Appearance
1     1,2,3,             1                 1
2     1,2,3              1.2               1.1
3     A,B,C              1.23              1.1A
4     1,2,3              1.2.4             1.1.1
5     A,B,C              1.2.45            1.1.1A
6     1,2,3              1.2.4.6           1.1.1.1
7     A,B,C              1.2.4.67          1.1.1.1A
8     1,2,3              1.2.4.6.8         1.1.1.1.1
9     A,B,C              1.2.3.6.89        1.1.1.1.1A
  • The actual levels are picked from a drop down list and appear as '1' in the number format box. This makes getting the numbering wrong quite easy so take care. The last number in each level is obtained by selecting the number format in the 'Number style for this level' box.

Once you have set up your styles and ensured that they are linked to the above numbering scheme you need to adjust the styles used for the headings in you current document.

Do a search and replace to do the following style replacements

Current Style        New Style
Heading 1            Heading Point 1
Heading 2            Heading Point 2 
Heading 3            Heading Point 3
Heading 4            Heading Point 4 
Heading 5            Heading Point 5 

Then for each of your extension headings where you are currently creating the numbering using style ref and seq field delete the fields and apply the relevant Ext Heading.

Thus for A,B,C numbering after 'Heading Point 2', apply the 'Heading Point 2 Ext' style.

This should now mean that all Heading Point styles can be accessed through the cross reference dialog.

If you document headings at 'Heading 6' Level 6 and below the after 'Heading Point 5 Ext you can use the Heading styles (Heading 6 to Heading 9) as normal. However, each time you use a Heading 6 you will need to manually reset the number. I think this is an easier task than asking users to insert multiple styleref and seq fields because you just select then right click on the heading number and then tick buttons to enable 'Advanced value (skip number)' which allows you to reset any level within your current Heading Number.

If you subsequently need to create a TOC field for your document you will now have to use the \t switch and provide a list of styles and the level number to use for the style in the TOC. e.g. {toc \t "Heading Point 1,1,Heading Point 2,2,Heading Point 2 Ext,2,Heading Point 3,3,Heading Point 3 Ext,3.....etc}.

I have created and tested all of the above in a Word document.

enter image description here