Я использую Word 2010 и часто вставляю перекрестные ссылки. Элементы для перекрестных ссылок - это в основном номера таблиц и цифры, такие как Talbe 1-2 или Figures 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 и одну командную кнопку.
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 таблиц или рисунков, список показывает только несколько.
Я надеюсь, что любой может исправить сценарий.
Спасибо.