我使用的是 Word 2010,经常需要插入交叉引用。需要交叉引用的项目大多是表格编号和图号,例如表 1-2 或图 2-4。它们总是包含章节编号。我想使用宏来简化此交叉引用过程,其功能如下:
- 将出现一个带有选项按钮的用户表单,供我指定表格或图形。(例如,我将选择表格。)
- 然后,将使用带有列表视图的用户表单显示文档中所有表格的列表。
- 我将滚动列表并选择一个我想要参考的列表。例如,我将选择表 3-4。
- 将插入“表 3-4”(标签和编号)。
我编写了一个如下的VBA脚本。它由一个标准模块和两个表单模块组成。
标准模块如下所示。
Option Explicit
Public refLabel As String
'
Sub CrossReference()
Load frmLabel
frmLabel.Show
Call Form
End Sub
Private Sub Form()
MsgBox "Please specify the ” & refLabel & " number to be cross referenced."
Load frmCrossRef
frmCrossRef.Show vbModeless
End Sub
其中一个“frmLabel”的表单模块如下所示,它有一个命令按钮和两个选项按钮。
Private Sub CommandButton1_Click()
If OptionButton1 = True Then
refLabel = OptionButton1.Caption
ElseIf OptionButton2 = True Then
refLabel = OptionButton2.Caption
End If
frmLabel.Hide
End Sub
选项按钮 1 表示“表格”,选项按钮 2 表示“图形”。根据此用户表单,refLabel 是“表格”或“图形”,具体取决于选择了哪个选项。
另一个“frmCrossRef”的表单模块如下。该表单有一个 ListView 和一个 Command Button。
Private Sub UserForm_Initialize()
With Me.ListView1
.View = lvwReport
.LabelEdit = lvwManual
.HideSelection = False
.AllowColumnReorder = True
.Gridlines = True
.ColumnHeaders.Add , "_Outline", refLabel, 200
.FullRowSelect = True
End With
items = ActiveDocument.GetCrossReferenceItems(refLabel)
For Each Item In items
ListView1.ListItems.Add , , Item
Next
End Sub
Private Sub CommandButton2_Click()
ind = ListView1.SelectedItem.Index
Selection.InsertCrossReference ReferenceType:=refLabel, _
ReferenceKind:=wdOnlyLabelAndNumber, _
ReferenceItem:=ind, InsertAsHyperlink:=True, IncludePosition:=False
Unload Me
End Sub
它看起来和我预期的一样,但是 ListView 没有显示完整的表格或图形列表。虽然有大约 20 个表格或图形,但列表只显示了其中的几个。
我希望有人能修改脚本。
谢谢。