Hi Jana,
Quote:
|
Is it possible to this fault, the fact that im using office 2010?
|
No. I developed the code on Office 2010. The error suggests the document you're running the code on does not have a Style named 'Heading 2'.
The following version of the code should work with whatever your Word installation calls these Styles:
Code:
Sub InsertRefs()
Application.ScreenUpdating = False
Dim RngHd2 As Range, RngHd3 As Range, RngRef As Range, oPara As Paragraph
Dim Hd1 As String, Hd2 As String, Hd3 As String
With ActiveDocument
Hd1 = .Styles(wdStyleHeading1).NameLocal
Hd2 = .Styles(wdStyleHeading2).NameLocal
Hd3 = .Styles(wdStyleHeading3).NameLocal
End With
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = ""
.Style = Hd2
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute
End With
Do While .Find.Found
Set RngHd2 = .Paragraphs(1).Range.Duplicate
With RngHd2
On Error GoTo ParaLast
While .Paragraphs.Last.Next.Style <> Hd1 And .Paragraphs.Last.Next.Style <> Hd2
.MoveEnd wdParagraph, 1
Wend
ParaLast:
If .Paragraphs.Count > 2 Then
Set RngRef = RngHd2.Paragraphs(3).Range.Characters.Last
.MoveStart wdParagraph, 3
Set RngHd3 = RngHd2
With RngRef
.MoveEnd wdCharacter, -1
.InsertAfter " { "
For Each oPara In RngHd3.Paragraphs
If oPara.Style = Hd3 Then
If Len(Trim(oPara.Range.Text)) > 1 Then
.InsertAfter Left(oPara.Range.Text, Len(oPara.Range.Text) - 1) & ", "
End If
End If
Next
.Characters.Last.Previous.Delete
.InsertAfter "}."
End With
End If
End With
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Application.ScreenUpdating = True
End Sub