在范围已分配的数组的情况下,LBound和Ubound冲突 [英] LBound and Ubound conflicts in case of array which has been assigned by the Range
问题描述
代码
height = objExcel1.Application.WorksheetFunction.CountA(ob3.Columns(1))
'MsgBox(height)
ReDim dataArray(height - 2, 0) ' -1 for 0 index, -1 for the first row as header row, excluded
str = ""
dataArray = ob3.Range(ob3.Cells(2, 1),ob3.Cells(height, 1)).Value
Set d = CreateObject("scripting.dictionary")
'MsgBox(LBound(DeletArr) & ":" & UBound(DeletArr))
For i = LBound(DeletArr) To UBound(DeletArr)
If Not d.exists(DeletArr(i)) Then
d(DeletArr(i)) = 0
End If
Next
MsgBox(LBound(dataArray,1) & ":" & UBound(dataArray,1))
For i = LBound(dataArray, 1) To UBound(dataArray, 1) - 1
If d.exists(dataArray(i, 1)) Then
str = str & (i+1) & ":" & (i+1) & ","
'ob3.Range(i & ":" & i).Delete
Else
'found = False
End If
Next
VBScript数组基于0.但是为什么LBound(dataArray,1)
给起始下标是1
,为什么不为0? Ubound
给出了数字-我有点困惑,是数组的最后一个下标还是大小?
VBScript Array is 0 based. But why LBound(dataArray,1)
is giving starting subscript is 1
,why not 0? Ubound
is giving the number - against which i am bit confused is it the last subscript of the array or the size?
谢谢
推荐答案
默认情况下,VBA数组的下标/索引从0开始(这称为数组的下限),并一直运行到您在其中指定的数字Dim语句(这称为数组的上限).如果您希望数组索引号从1开始,请在模块顶部添加以下语句.
By default, the subscripts/indices of VBA arrays start at 0 (this is called the lower bound of the array) and run up to the number you specify in the Dim statement (this is called the upper bound of the array). If you would prefer your array index numbers to start at 1, include the following statement at the top of the module.
Option Base 1
但是,当使用Transpose
方法由Range
对象填充数组时,即使您处于默认的Zero baed
模式,该数组的下限也会设置为1.因此,数组将基于1.
However when an array is populated by Range
object using the Transpose
method, the array Lower bound set to 1 even you are on default Zero baed
mode. So array becomes 1 based.
例如使用Transpose
方法添加以下数据.
e.g. the following data is added using Transpose
method.
Array(1) = "Hola"
Array(2) = "Bonjour"
Array(3) = "Hello"
Array(4) = "Wei"
好的是,此数组UBound
告诉您= UBound的元素数(4).不同于如果它是从零开始的,则元素数= Ubound + 1.
Good thing is that this array UBound
tells you number of elements (4) which = UBound. Unlike if it was zero based, then number of elements = Ubound + 1.
UBound(Array) --> 4
LBound(Array) --> 1
在当前基于1的方案中,Ubound表示元素总数.因此,在这种情况下,您需要修改代码以跟踪数组的LBound
和UBound
属性中的数据,以避免数据丢失.
In current 1-based scenario, the Ubound refers to the total number of elements. So in such cases you need to amend your code to track data within the array's LBound
, UBound
properties to avoid data loss.
并且顺便说一句,通过添加Option Base 0
不会停止使用Transpose
方法将数组提到1.这使我的第一条评论无效.
And by the way, by adding Option Base 0
doesn't stop array being dimentioned to 1 based by Transpose
method. Which invalids my first comment.
这篇关于在范围已分配的数组的情况下,LBound和Ubound冲突的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!