Microsoft Office Forums

Go Back   Microsoft Office Forums > >

Reply
 
Thread Tools Display Modes
  #1  
Old 11-19-2022, 04:06 PM
BrianHoard BrianHoard is offline How to put endnotes and cross-references in numerical order? Windows 10 How to put endnotes and cross-references in numerical order? Office 2019
Advanced Beginner
How to put endnotes and cross-references in numerical order?
 
Join Date: Jul 2022
Location: Haymarket, VA USA
Posts: 85
BrianHoard is on a distinguished road
Default How to put endnotes and cross-references in numerical order?

We have documents with a situation where there are multiple (stacked) endnote markers, footnotes, and cross-references. Such as "Stacked[5a63]" (The characters between square brackets are superScript) See attached Word doc.


And the "3" is a cross-reference, this is the character I need to move.

We need to get the cross-references to be in numerical order with the endnotes.

In this script, I have found where the cross-references are, and if they are preceded by an endnote with a larger number. So now, I just need to figure out how to move the cross-reference before the endnote marker.
Ideally, without using anything like cut/paste, as we have had problems using that on large documents.

Here's my code where I'm trying to figure this out. If you run this, you should see my print statements where I print "swap here..." but I don't know how to do that part.
Code:
Sub bhh_stackedSourcesFix()
  ' Written by Brian Hoard, www.BrianHoard.com
  ' Script date: 11/16/2022
  ' Script to correct citation numbers when multiple citations are stacked next to each other.
 
  Dim scriptName As String
  scriptName = "bhh_stackedSourcesFix v0.1"
 
  Dim bhhUndo As UndoRecord ' Allows grouping this entire script within a single undo action.
  
  Application.ScreenUpdating = False
  ' Begin undo record
  Set bhhUndo = Application.UndoRecord
  bhhUndo.StartCustomRecord (scriptName)
  
  ' Check if we're dealing with dynamic endnotes, and process accordingly.
  If ActiveDocument.Endnotes.Count > 0 Then
    Debug.Print ("Endnotes are in use.")
    
    ' Looking for cross-refs which may be out of order.
    Dim oStory As Range
    Dim i As Integer
    Dim XrefNum As Integer
    Dim rng_Xref As Range
    Dim rng_charCheck As Range ' range to check each character left of Xref.
    Dim rng_charCheck2 As Range
    Dim str_charCheck As String
    Dim str_charCheck2 As String
    Dim eNote As Endnote
    Dim lng_eNoteStart As Long
    Dim int_endnoteMarker As Integer
    Dim j As Integer
            
    For Each oStory In ActiveDocument.StoryRanges
      For i = oStory.Fields.Count To 1 Step -1
        If oStory.Fields(i).Type = wdFieldNoteRef Then
          ' We found a cross-reference.
          Debug.Print ("----------")
          Debug.Print ("Fields(" & i & ") is a cross-ref.")
          
          Set rng_Xref = oStory.Fields(i).Result ' stores the cross ref range
          
          ' Okay, we have our cross-ref character(s),
          ' but are they superscript numbers?
          str_charCheck = rng_Xref.Text
          
          If (rng_Xref.Font.Superscript = True) And (IsNumeric(str_charCheck) = True) Then
            Debug.Print ("  rng_Xref is a numeric superscript, " & str_charCheck)
            
            ' Our cross-ref is a numeric superscript. Next, check if there
            ' are any chars, cross-refs, or dynamic endnotes
            ' preceding it that are out of order with current cross-ref.
            
            Set rng_charCheck2 = rng_Xref.Duplicate ' Copy rng_Xref so we leave it untouched as we test preceding chars.
            rng_charCheck2.MoveStart wdCharacter, Count:=-1 ' Move range to left 1 char.
            Debug.Print ("rng_charCheck2.Start, .End: " & rng_charCheck2.Start & ", " & rng_charCheck2.End)
            
            str_charCheck2 = rng_charCheck2.Characters(1)
            
STXcheck:
  Debug.Print ("STXcheck:")
  If str_charCheck2 = Chr(2) Then ' Hidden STX symbol,
    Debug.Print ("STX character found, checking if it's an endnote.")
    
    Debug.Print ("rng_charCheck2.Start: " & rng_charCheck2.Start)
    
    ' Check for endnote here
    
    ' Loop through endnotes, starting at highest one, working backwards.
    For j = ActiveDocument.Endnotes.Count To 1 Step -1
      Set eNote = ActiveDocument.Endnotes(j)
      With eNote
        If .Reference.Start = rng_charCheck2.Start Then
          Debug.Print (".Reference.Start: " & .Reference.Start)

          ' Our preceding char is an endnote.
          int_endnoteMarker = eNote.Index ' Store endnote marker number

          Debug.Print ("endnote marker: " & int_endnoteMarker)

          If int_endnoteMarker > str_charCheck Then
            Debug.Print ("int_endnoteMarker: " & int_endnoteMarker & " is > str_charCheck: " & str_charCheck)
            Debug.Print ("Swap here...")
            
          Else
            Debug.Print ("int_endnoteMarker: " & int_endnoteMarker & " is NOT > str_charCheck: " & str_charCheck & ", we're done.")
          End If ' int_endnoteMarker > ...

        End If ' endnote start = rng_charCheck2.Start

      End With ' eNote
    Next j
    
    rng_charCheck2.MoveStart wdCharacter, Count:=-1
    str_charCheck2 = rng_charCheck2.Characters(1)
    GoTo STXcheck
  Else
    Debug.Print ("Not STX")
  End If ' STX character 
            
          Else
            Debug.Print ("rng_Xref is NOT a numeric superscript.")
          End If ' rng_Xref is superscript number or not.
          
          ' Check if the character preceding cross-ref is a superScript number,
          ' if so, does it need swapped?
          Set rng_charCheck = rng_Xref ' Copy range to start our check for the character preceding.
          rng_charCheck.Start = (rng_Xref.Start - 1)
          ' Check if this character is a superScript number.
          str_charCheck = rng_charCheck.Characters(1)
          
        End If ' /field type cross-ref
      Next i
    Next oStory   
   
  Else
    Debug.Print ("No Endnotes are in use.")
  End If ' /endnotes.Count > 0 or not.
  
  bhhUndo.EndCustomRecord ' End undo block
  
  Exit Sub

End Sub ' bhh_stackedSourcesFix v0.1
Attached Images
File Type: png vbaSnap.png (11.4 KB, 10 views)
Attached Files
File Type: docx stackedSourcesTest.docx (16.8 KB, 5 views)
Reply With Quote
Reply



Similar Threads
Thread Thread Starter Forum Replies Last Post
Checking for corruption in cross-references to endnotes sgtga Word 5 02-14-2022 07:03 PM
How to put endnotes and cross-references in numerical order? How to create endnotes with hyperlink references Jennifer Murphy Word 7 01-27-2020 11:51 PM
Put numbers within a cell into numerical order. 14spar15 Excel 3 04-07-2019 11:34 PM
How to put endnotes and cross-references in numerical order? Why isn't cross-references dialogue box in numerical order? seanspotatobusiness Word 1 07-26-2018 03:05 PM
Convert manual cross references in footnotes to other footnotes to automatic cross references ghumdinger Word VBA 7 11-20-2014 11:47 PM

Other Forums: Access Forums

All times are GMT -7. The time now is 04:36 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.
Search Engine Optimisation provided by DragonByte SEO (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
MSOfficeForums.com is not affiliated with Microsoft