GetCrossReferenceItems в msword и VBA, показывающие только ограниченное содержимое - PullRequest
1 голос
/ 04 июня 2009

Я хочу составить специальный список фигур с использованием VBA, и здесь я использую функцию

myFigures = ActiveDocument.GetCrossReferenceItems(Referencetype:="Figure")

В моем документе Word 20 цифр, но myFigures содержит только первые 10 цифр (см. Мой код ниже.).

Я искал в интернете и обнаружил, что у других была такая же проблема, но я не нашел никаких решений.

Мое слово - версия 2003

Пожалуйста, помогите мне ....

Sub List()

Dim i As Long

Dim LowerValFig, UpperValFig As Integer

Dim myTables, myFigures as  Variant

If ActiveDocument.Bookmarks.Count >= 1 Then

    myFigures = ActiveDocument.GetCrossReferenceItems(Referencetype:="Figure")
    ' Test size...
    LowerValFig = LBound(myFigures) 'Get the lower boundry number.
    UpperValFig = UBound(myFigures) 'Get the upper boundry number
    ' Do something ....
    For i = LBound(myFigures) To UBound(myFigures) ‘ should be 1…20, but is onlu 1…10
           'Do something ....
    Next i
End If
MsgBox ("Done ....")

End Sub*

Ответы [ 3 ]

1 голос
/ 11 июня 2009

Определенно что-то странное с этим. Если я запускаю следующий код в документе, который содержит 32 подписи к рисункам, в обоих окнах сообщений отображается 32. Однако, если я раскомментирую цикл For Next, они отображают только 12 и итерация прекращается после 12-го элемента.

Dim i As Long

Dim myFigures As Variant

myFigures = ActiveDocument.GetCrossReferenceItems("Figure")
MsgBox myFigures(UBound(myFigures))
MsgBox UBound(myFigures)
'For i = 1 To UBound(myFigures)
'    MsgBox myFigures(i)
'Next i
0 голосов
/ 28 марта 2015

У меня была та же проблема с моим настраиваемым диалоговым окном перекрестных ссылок, и я решил ее, вызывая диалоговое окно после каждой команды ActiveDocument.GetCrossReferenceItems (YourCaptionName).

Итак, вы печатаете:

varRefItemsFigure1 = ActiveDocument.GetCrossReferenceItems(g_strCaptionLabelFigure1)
  For k = 1 To UBound(varRefItemsFigure1)
    frmBwtRefDialog.ListBoxFigures.AddItem varRefItemsFigure1(k)
  Next

и затем:

frmBwtRefDialog.Show vbModeless

Таким образом, диалог вызывается несколько раз вместо одного, но он работает быстро и не создает никаких проблем. Я использовал это в течение одного года и не видел никаких ошибок.

Наслаждайтесь!

0 голосов
/ 24 марта 2014

Честно говоря, мне неприятно называть это "ответом", но вот что я сделал в той же ситуации. Может показаться, что вход в отладчик и пошаговое выполнение GetCrossReferenceItems всегда возвращает правильное значение. Вдохновленный этим, я пробовал различные способы вернуть управление Word (DoEvents; запуск следующего сегмента с помощью Application.OnTime), но безрезультатно. В конце концов, единственное, что я нашел, это работало, это вызывал отладчик между назначениями, поэтому у меня есть:

utilRefs = ActiveDocument.GetCrossReferenceItems (wdRefTypeNumberedItem): Стоп

availableTables = ActiveDocument.GetCrossReferenceItems (wdCaptionTable): Стоп

vendFigures = ActiveDocument.GetCrossReferenceItems (wdCaptionFigure)

Это не красиво, но, поскольку я единственный человек, который будет управлять этим, это отчасти работает для моих целей.

...