excel vba 下标越界问题,如何解决?

Subtj()'定义tj()Dimbm()'定义数组表名bm()i=Worksheets.Count'i=表的张数ReDimbm(1Toi)'重新定义数组表名(1toi)... Sub tj() '定义tj()
Dim bm() '定义数组表名bm()
i = Worksheets.Count 'i=表的张数
ReDim bm(1 To i) '重新定义数组表名(1 to i)
For x = 2 To i '循环 从2到i
bm(x) = Sheets(x).Name '把表的名字给 表名()
Next
For y = 4 To 80
For z = 1 To i
If Cells(y, 3) = bm(z) Then
If Sheets(bm(z)).Cells(34, 8) = "借" Then '(就是这个地方说是下标越界)
Cells(y, 2) = Sheets(bm(z)).Cells(34, 9) * (-1)
ElseIf Sheets(bm(z)).Cells(34, 8) = "贷" Then
Cells(y, 2) = Sheets(bm(z)).Cells(34, 9) * (-1)
End If
End If
Next
Next
展开
 我来答
太极健1969
2014-02-17 · TA获得超过9033个赞
知道大有可为答主
回答量:8668
采纳率:69%
帮助的人:3615万
展开全部
你的代码似乎不完整呀
你的代码错在z,
你前面给bm赋值时,是从2到i
这样你的bm(1)将是一个空值,空工作表名的工作表不存在,所以下标越界了
把for z=1 to i
改成 for z=2 to i
就可以了
hbpaoxiao2
推荐于2018-05-09 · TA获得超过2898个赞
知道大有可为答主
回答量:1962
采纳率:72%
帮助的人:871万
展开全部
For x = 2 To i        '循环 从2到i
bm(x) = Sheets(x).Name  '把表的名字给 表名()
Next

你这里是从2开始循环的,bm(1)并没有值。

For z = 1 To i
If Cells(y, 3) = bm(z) Then
If Sheets(bm(z)).Cells(34, 8) = "借" Then     '(就是这个地方说是下标越界)

你这里的z是从1开始的,所以会出错

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式