1

Я использую Word 2010 и часто вставляю перекрестные ссылки. Элементы для перекрестных ссылок - это в основном номера таблиц и цифры, такие как Talbe 1-2 или Figures 2-4. Они всегда включают номера глав. Я хочу упростить эту процедуру перекрестных ссылок, используя макрос, который работает следующим образом:

  1. Форма пользователя с опциональными кнопками появится для меня, чтобы указать таблицу или рисунок. (Например, я выберу таблицу.)
  2. Затем появится список всех таблиц в документе с использованием формы пользователя с представлением списка.
  3. Я прокручиваю список и выбираю тот, на который хочу сослаться. Например, я выберу таблицу 3-4.
  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 таблиц или рисунков, список показывает только несколько.

Я надеюсь, что любой может исправить сценарий.

Спасибо.

0