msword和VBA中的GetCrossReferenceItems仅显示有限的内容

时间:2009-06-04 09:37:22

标签: ms-word word-vba

我想使用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 个答案:

答案 0 :(得分:1)

绝对是那种片状的东西。如果我在包含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

答案 1 :(得分:0)

坦率地说,我把这称为“答案”感觉不好,但这就是我在同样情况下所做的。看起来进入调试器并单步执行GetCrossReferenceItems 总是会返回正确的值。受此启发,我尝试了各种方法将控制权交还给Word(DoEvents;使用Application.OnTime运行下一个段),但无济于事。最终,我发现唯一有效的方法是在分配之间调用调试器,所以我有:

  

availRefs =   ActiveDocument.GetCrossReferenceItems(wdRefTypeNumberedItem):停止

     

availTables =   ActiveDocument.GetCrossReferenceItems(wdCaptionTable):停止

     

availFigures = ActiveDocument.GetCrossReferenceItems(wdCaptionFigure)

它不漂亮但是,因为我是唯一一个将要运行它的人,它有点适用于我的目的。

答案 2 :(得分:0)

我的自定义交叉引用对话框出现了同样的问题,并通过在每个命令ActiveDocument.GetCrossReferenceItems(YourCaptionName)之后调用对话框来解决它。

所以你输入:

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

然后:

frmBwtRefDialog.Show vbModeless

因此,对话框多次调用而不是一次,但它运行速度快,不会有任何麻烦。我使用了一年,没有看到任何错误。

享受!