在范围已分配的数组的情况下,LBound和Ubound冲突 [英] LBound and Ubound conflicts in case of array which has been assigned by the Range

查看:78
本文介绍了在范围已分配的数组的情况下,LBound和Ubound冲突的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

代码

    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表示元素总数.因此,在这种情况下,您需要修改代码以跟踪数组的LBoundUBound属性中的数据,以避免数据丢失.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆