番号付きアイテムのテキストを指定して、(単純な番号付きリストから) 特定の番号付きアイテムへの相互参照を挿入する必要があります。ユーザーは、以下に示すように、相互参照するリスト項目と相互参照を挿入する場所を選択します。
1. This is item 1
2. This is item 2 <-- user selects this line
3. This is item 3
------------------
[2] This is a reference to item 2 <-- user ctrl selects this line too
^ macro will insert the 2 as a cross reference to the selected list item
ただし、同じテキストの番号付きアイテムが多数存在する可能性があるため、どのアイテムが選択されているかを判断する方法が必要です。正しいテキストを含む各アイテムを選択し、それが文書内の正しい場所にあるかどうかを確認する予定です。正しい場所にある場合は、"ReferenceItem:" 番号がわかったので、相互参照を挿入できます。次の結果をループします。
ActiveDocument.GetCrossReferenceItems(wdRefTypeNumberedItem)
番号付きのアイテムの参照番号を正しいテキストで取得しますが、各候補を選択する方法がわからないため、その場所をテストできます。何かのようなもの:
ActiveDocument.Goto.CrossReferenceItem(81)
これはワード2010です。
コード例 (すべてのエラー チェックを削除):
'Create a temporary character style
ActiveDocument.Styles.Add "_TEMP_STYLE_", wdStyleTypeCharacter
'Apply the temporary style to the discontiguous selection
Selection.Style = ActiveDocument.Styles("_TEMP_STYLE_")
Set olRange = ActiveDocument.Range
With olRange.Find
.ClearAllFuzzyOptions
.ClearFormatting
.ClearHitHighlight
.Style = ActiveDocument.Styles("_TEMP_STYLE_")
.Text = ""
.Wrap = wdFindStop
'llNumberedParaStart is used in the check of a numbered item to see if it is
'the right one
llNumberedParaStart = -1
llChildParaStart = -1
Do While .Execute
If .Found Then
If olRange.Paragraphs(1).Range.ListFormat.ListType = wdListSimpleNumbering Then
llNumberedParaStart = olRange.Characters(1).Start
' Do some work before this to get the text to check for
slNumberedParaText = Selection.Text
Else
llChildParaStart = olRange.Characters(1).Start
End If
Loop
End With
slaNumItems = ActiveDocument.GetCrossReferenceItems(wdRefTypeNumberedItem)
'Loop through all the numbered items and find the correct one
For ilRefItem = 0 To UBound(slaNumItems)
If InStr(slNumberedParaText, slaNumItems(ilRefItem)) = 0 Then
'Check to make sure the reference is the correct one
********** select the numbered item and check its position **********
'Insert the cross reference after selecting the correct location
Selection.InsertCrossReference ReferenceType:="Numbered item", _
ReferenceKind:=wdNumberRelativeContext, ReferenceItem:=ilRefItem, _
InsertAsHyperlink:=True, IncludePosition:=False, SeparateNumbers:=False, _
SeparatorString:=" "
Exit For
End If
Next ilRefItem