我想使用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*
答案 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
因此,对话框多次调用而不是一次,但它运行速度快,不会有任何麻烦。我使用了一年,没有看到任何错误。
享受!