VBA UBound返回一个负值
我想知道我做错了什么 我打开了一个word文档(在word 2010中),其中有三个表。我想在VBA中测试基本表提取,并按照说明进行操作 我在这一行得到一个错误:ReDim Preserve aDataAll(nrRecs,nrFields),这是由于“nrFields”被设置为负值(-1)VBA UBound返回一个负值,vba,ms-word,Vba,Ms Word,我想知道我做错了什么 我打开了一个word文档(在word 2010中),其中有三个表。我想在VBA中测试基本表提取,并按照说明进行操作 我在这一行得到一个错误:ReDim Preserve aDataAll(nrRecs,nrFields),这是由于“nrFields”被设置为负值(-1) 不知道数组的上界是如何为负值的。。。在此方面的任何帮助都将不胜感激。尽管非常奇怪,但对于任何维度,VARIANT SAFEARRAY都可能有负的下限值和上限值。数组范围为LBound(,维度)到UBound
不知道数组的上界是如何为负值的。。。在此方面的任何帮助都将不胜感激。尽管非常奇怪,但对于任何维度,VARIANT SAFEARRAY都可能有负的下限值和上限值。数组范围为LBound(,维度)到UBound(,维度)
必须为真的是UBound>=LBound 要获取数组大小,请使用UBound-LBound+1
过去习惯使用VBA代码顶部的
Option Base
语句设置下限,当然,这不会影响第三方库返回的数组。大多数人过去都用1作为下限。我想出来了——我试图提取一个嵌套表。我必须在所有子表中循环并逐个提取。此外,在提取之前,我必须搜索并删除^p
,以保留表结构
在我弄明白之后,我注意到MS代码示例有一个错误:aData2(j)
实际上应该是aData2(lFields)
希望这对其他新手有所帮助 如果UBound为-1且LBound=0,则数组为空。可以按如下方式生成空数组:
Dim EmptyArray() As String
Dim s As String
EmptyArray = Split("")
Debug.Print (UBound(EmptyArray)) ' displays -1
Debug.Print (LBound(EmptyArray)) ' displays 0
在您的情况下,如果阵列为空,我怀疑您需要跳过处理:
aData1 = Split(...)
If (UBound(aData1) < LBound(aData1) Then
' UBound is -1 and LBound is 0, array is empty, nothing to do
Else
' Array is non-empty, do your stuff
End If
aData1=Split(…)
如果(UBound(aData1)
Hmmm-我的文档肯定有问题:如果我插入以下行:MsgBox(“UBound:&UBound(aData2())&.LBound:&LBound(aData1())
我得到了UBound:-1.LBound:0。“必须为真的是UBound>=LBound。”-除非数组为空,否则请查看我的答案。
aData1 = Split(...)
If (UBound(aData1) < LBound(aData1) Then
' UBound is -1 and LBound is 0, array is empty, nothing to do
Else
' Array is non-empty, do your stuff
End If