楼主: 20101042139
6346 9

[问答] Excel VBA 下标越界 问题 [推广有奖]

  • 0关注
  • 4粉丝

已卖:195份资源

硕士生

39%

还不是VIP/贵宾

-

威望
0
论坛币
38095 个
通用积分
1.8850
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
9408 点
帖子
84
精华
0
在线时间
179 小时
注册时间
2012-9-17
最后登录
2018-7-15

楼主
20101042139 学生认证  发表于 2016-3-2 18:26:49 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
Sub 罗列不及格的成员()
Dim i As Integer, j As Integer, rng As Range, arr1, arr2() 'arr2()为指定的动态变量
Set rng = Range([a2], Cells(Rows.Count, 2).End(xlUp)) '复制后直接在内存调用,而不用再到单元格调用,加快运行速度
ReDim arr2(1 To WorksheetFunction.CountIf(rng, "<60"), 1 To 2) '定义动态数组
arr1 = rng.Value
For i = 1 To UBound(arr1) '终止值为数组第一维的上标
    If arr1(i, 2) < 60 Then
    j = j + 1   
     arr2(j, 1) = arr1(i, 1)'提示下标越界
    arr2(j, 2) = arr1(i, 2)

    End If
Next i
    Range("d1:e" & j) = arr2
End Sub
我按照书本上写的,可是arr2(j, 1) = arr1(i, 1)'提示下标越界,不知道问题出在哪里,求大神帮忙,多谢多谢

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:EXCEL xcel exce 下标越界 cel Excel 动态

数据.xlsx
下载链接: https://bbs.pinggu.org/a-1983791.html

133.17 KB

这是案例数据,谢谢

我是逗比

沙发
caihaiyu 在职认证  发表于 2016-3-3 10:16:47
提示下表越界后,点击调试,鼠标移动到出错的那行的j变量上,看看此时j变量值是多少。
这个错误应该是j超过了你定义的数组上限了

藤椅
20101042139 学生认证  发表于 2016-3-3 10:25:47
caihaiyu 发表于 2016-3-3 10:16
提示下表越界后,点击调试,鼠标移动到出错的那行的j变量上,看看此时j变量值是多少。
这个错误应该是j超过 ...
j最开始默认的是0,我单个检查也没有越界,可弄到一起就不行了。

板凳
caihaiyu 在职认证  发表于 2016-3-3 14:45:54
j的数据类型是integer,最大值是32767,你的数据量是不是过大了?

报纸
20101042139 学生认证  发表于 2016-3-4 10:37:30
caihaiyu 发表于 2016-3-3 14:45
j的数据类型是integer,最大值是32767,你的数据量是不是过大了?
数据只有八千多行的,好像没有超,例子里面也三千多行。

地板
caihaiyu 在职认证  发表于 2016-3-4 11:37:25
你把Excel发到我邮箱,我看看。下载还要1个论坛币,太浪费。haiyucai@126.com

7
20101042139 学生认证  发表于 2016-3-5 09:23:58
caihaiyu 发表于 2016-3-4 11:37
你把Excel发到我邮箱,我看看。下载还要1个论坛币,太浪费。haiyucai@126.com
好的,已发,多谢了哈。

8
caihaiyu 在职认证  发表于 2016-3-7 08:44:42
出现越界的问题是由于你的成绩列表中间有很多的空白单元格。
ReDim arr2(1 To WorksheetFunction.CountIf(rng, "<60"), 1 To 2)
这句计算时会忽略空白单元格,计算的数组上限是3636,
而arr1 = rng.Value你将空白单元格也赋值给了arr1,导致在实际判断时,空白单元格也算作不及格。导致不及格数比arr2的上限大,而出现下标越界的情况。

解决方法把数据中的空白单元格清除即可。

9
20101042139 学生认证  发表于 2016-3-11 20:03:32
caihaiyu 发表于 2016-3-7 08:44
出现越界的问题是由于你的成绩列表中间有很多的空白单元格。
ReDim arr2(1 To WorksheetFunction.CountIf( ...
多谢多谢

10
matlab-007 发表于 2016-5-29 21:03:10
下标越界错误大概有以下的原因和解决方法:
引用了不存在的数组元素。下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。检查数组的声明以确认其上界和下界。若使用的是重新指定范围的数组,应使用 UBound 和 LBound 函数来决定数组访问。如果索引指定为变量,应检查变量名的拼写。
声明数组时没有指定元素的数目。引用了不存在的集合成员。 试着使用 For Each...Next 结构代替指定元素下标。
使用速写形式的下标,结果指定了错误的元素。下标越界不存在对应的工作薄、工作表名称是否写正确。当再次遇到VBA报下标越界错误时,就不会惊慌了,至少大概知道其原因了。我们再参照上面的思路去修改代码就可以解决下标越界的错误。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 11:41