请为索引超出了数组界限是怎么意思?

yinghaoromeo 2010-12-18 09:27:21
定义了一个二维数组arrCI,复制成功后,里面有489个元素,从aryCI(0,0)开始的
但是到了aryCIindex(0) = aryCI(0, 0)就提示索引超出了数组界限是怎么意思?

                Dim aryCI(rowcount - 2, 0) As Object, aryCInum() As Integer, aryCIindex(0) As String, s As String
aryCI = .Range(.Cells(2, locBc(2)), .Cells(rowcount, locBc(2))).Value
ReDim aryCIindex(0)
aryCIindex(0) = aryCI(0, 0)
...全文
1498 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinghaoromeo 2010-12-20
  • 打赏
  • 举报
回复
看来就是版本的问题了,唉,这么招吧,微软也靠不住。
把分都给你吧,我现在连发帖的分都没了。
[Quote=引用 26 楼 qqrn 的回复:]
vs2008
[/Quote]
QQRN 2010-12-20
  • 打赏
  • 举报
回复
vs2008
yinghaoromeo 2010-12-20
  • 打赏
  • 举报
回复
谢谢你啊,我的虽然现实aryCI是从aryCI(0,0)开始的,但是引用第一个元素的时候,
应该引用aryCI(1,1)就可以了,怎么我的现实方式跟你的不一样?
是我用的Visual studio版本的bug?
我用的是Visual studio2010 10.0.30319.1 RTMRel
在网上下载的,直接安装不用输入什么码。
请问你用的是哪个版本的?


[Quote=引用 23 楼 qqrn 的回复:]
执行
aryCI = .Range(.Cells(2, locBc(2)), .Cells(rowcount, locBc(2))).Value
之后
aryCI就会变成(1,1)开始的数组
这个我亲自实验过了的.

VB.NET code

Dim Fn As String
Fn = "票.xls"
Dim Ex As New ……
[/Quote]
yinghaoromeo 2010-12-20
  • 打赏
  • 举报
回复
你看下我的截图吧,我也无语了,如果早就是你那样,我就发现问题了




[Quote=引用 23 楼 qqrn 的回复:]
执行
aryCI = .Range(.Cells(2, locBc(2)), .Cells(rowcount, locBc(2))).Value
之后
aryCI就会变成(1,1)开始的数组
这个我亲自实验过了的.

VB.NET code

Dim Fn As String
Fn = "票.xls"
Dim Ex As New ……
[/Quote]
QQRN 2010-12-20
  • 打赏
  • 举报
回复

执行
aryCI = .Range(.Cells(2, locBc(2)), .Cells(rowcount, locBc(2))).Value
之后
aryCI就会变成(1,1)开始的数组
这个我亲自实验过了的.

Dim Fn As String
Fn = "票.xls"
Dim Ex As New Excel.Application
Dim ExBook As Excel.Workbook
ExBook = Ex.Workbooks.Open(Fn)
Ex.DisplayAlerts = False
Dim aryCI(5, 0) As Object, aryCIindex(0) As String
With Ex
aryCI = .Range(.Cells(2, 1), .Cells(8, 1)).Value '此处设置断点
'可以看到aryCI的范围从(1,1)开始,无论Range的范围是多少都是一样
ReDim aryCIindex(0)
aryCIindex(0) = aryCI(0, 0)
End With
yinghaoromeo 2010-12-20
  • 打赏
  • 举报
回复
测试了,可以的。问题不是出在redim上,至于在哪儿,现在没人回复。

[Quote=引用 21 楼 vrhero 的回复:]
多年不用VB了,也没有环境测试...

但我记得Dim和ReDim声明的维长度是比维上限大1的,0不可以吧...也许我记错了,你最好多测试一下...
[/Quote]
vrhero 2010-12-20
  • 打赏
  • 举报
回复
多年不用VB了,也没有环境测试...

但我记得Dim和ReDim声明的维长度是比维上限大1的,0不可以吧...也许我记错了,你最好多测试一下...
yinghaoromeo 2010-12-20
  • 打赏
  • 举报
回复
高手排名这么靠前,烦劳您不吝赐教吧,这个问题我想了好几天了,想不明白,为什么会出现索引超出数组界限。


[Quote=引用 15 楼 vrhero 的回复:]
ReDim aryCIindex(0)

ReDim怎么用你知道吗?
[/Quote]
yinghaoromeo 2010-12-20
  • 打赏
  • 举报
回复

论坛怎么不能直接贴图,太抠门了。

我也奇怪呢,在vba里面这么用一点问题都没有,到这就卡住,谁能帮个忙啊



[Quote=引用 17 楼 wuyazhe 的回复:]
这个情况应该不会异常吧。异常时候再看看?
[/Quote]
yinghaoromeo 2010-12-20
  • 打赏
  • 举报
回复
我知道怎么用,按下面这么用运行是可以通过的,你不信自己去试。

Dim aryCIindex() As Object
ReDim aryCIindex(0)
aryCIindex(0) = 1





[Quote=引用 15 楼 vrhero 的回复:]
ReDim aryCIindex(0)

ReDim怎么用你知道吗?
[/Quote]
兔子-顾问 2010-12-20
  • 打赏
  • 举报
回复
这个情况应该不会异常吧。异常时候再看看?
yinghaoromeo 2010-12-20
  • 打赏
  • 举报
回复
鼠标停到出错那行

aryCIindex(0)是nothing
停到aryCI(0, 0)没有反应
但是鼠标停到上一行的aryci上面能显示里面有数值
aryCI(0,0) 18297_10011
aryCI(1,0) 18297_10012
aryCI(2,0) 18297_10013
……
……
aryCI(487,0) 18301_56193
aryCI(488,0) 18301_65530


[Quote=引用 14 楼 wuyazhe 的回复:]
单步调试到这一行,鼠标悬停看看哪个是Nothing,哪个错误。
[/Quote]
vrhero 2010-12-20
  • 打赏
  • 举报
回复
ReDim aryCIindex(0)

ReDim怎么用你知道吗?
兔子-顾问 2010-12-20
  • 打赏
  • 举报
回复
单步调试到这一行,鼠标悬停看看哪个是Nothing,哪个错误。
yinghaoromeo 2010-12-20
  • 打赏
  • 举报
回复
你说的是locBc(2))数组含有3个元素locBc(0)、locBc(1)、locBc(2),我知道,我问的显然不是这个问题。


我问的是为什么这一行aryCIindex(0) = aryCI(0, 0)
提示索引超出数组界限
aryCI(0,0)这个数值是存在的


[Quote=引用 12 楼 flyerwing 的回复:]
从0开始
如果有三个就是:0,1,2
[/Quote]
flyerwing 2010-12-20
  • 打赏
  • 举报
回复
从0开始
如果有三个就是:0,1,2
yinghaoromeo 2010-12-20
  • 打赏
  • 举报
回复
locBc(2))为整型,值是8

[Quote=引用 10 楼 yinghaoromeo 的回复:]
运行到最下面一行的时候提示索引超出了数组界限。
因为excel工作表当中那一列的数据,有可能是integer、double、也有可能是string,在vba里面
我习惯用variant变体型定义那个数组。在vb.net里面定义不明类型的变量是不是用object?
请指教,以前用vba没这么多的事儿,编的软件就卡在把excel工作表上的某一区域数据向数组赋值
然后再通过数组进行计算这一步了。……
[/Quote]
yinghaoromeo 2010-12-20
  • 打赏
  • 举报
回复
运行到最下面一行的时候提示索引超出了数组界限。
因为excel工作表当中那一列的数据,有可能是integer、double、也有可能是string,在vba里面
我习惯用variant变体型定义那个数组。在vb.net里面定义不明类型的变量是不是用object?
请指教,以前用vba没这么多的事儿,编的软件就卡在把excel工作表上的某一区域数据向数组赋值
然后再通过数组进行计算这一步了。


                Dim aryCI(,) As Object, aryCIindex() As Object, aryCInum() As Integer
aryCI = .Range(.Cells(2, locBc(2)), .Cells(rowcount, locBc(2))).Value
ReDim aryCIindex(0)
aryCIindex(0) = aryCI(0, 0)


[Quote=引用 9 楼 qqrn 的回复:]
你为啥用Object的类型?
看不出啥问题.
你把代码完整点贴出来吧
[/Quote]
QQRN 2010-12-20
  • 打赏
  • 举报
回复
你为啥用Object的类型?
看不出啥问题.
你把代码完整点贴出来吧
yinghaoromeo 2010-12-19
  • 打赏
  • 举报
回复
aryCI.length=489

所有值我写在下面
aryCI(0,0) 18297_10011
aryCI(1,0) 18297_10012
aryCI(2,0) 18297_10013
……
……
aryCI(487,0) 18301_56193
aryCI(488,0) 18301_65530


[Quote=引用 5 楼 xingyuebuyu 的回复:]
aryCI = .Range(.Cells(2, locBc(2)), .Cells(rowcount, locBc(2))).Value
这句执行后aryCI 的值是什么,长度是多少
[/Quote]
加载更多回复(7)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧