Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 我如何避免;下标超出范围?_Excel_Vba_Loops_Fill - Fatal编程技术网

Excel 我如何避免;下标超出范围?

Excel 我如何避免;下标超出范围?,excel,vba,loops,fill,Excel,Vba,Loops,Fill,我对“下标超出范围”错误消息有问题。我得到了一些帮助,编写了一个循环一长串股票的代码。该代码基本上生成了所有向量,因此我可以在面板数据设置中使用它 循环在4个股票之后停止,并给我一个“下标超出范围”错误。 我可以在前95个“I”上运行代码,即如果我转换第一部分: For i = 4 To 95 If Cells(i, 1) <> Cells(i - 1, 1) Then Clean_Stock_2 (i) 用于i=4到95 如果单元格(i,1)单元格(i-1,1),

我对“下标超出范围”错误消息有问题。我得到了一些帮助,编写了一个循环一长串股票的代码。该代码基本上生成了所有向量,因此我可以在面板数据设置中使用它

循环在4个股票之后停止,并给我一个“下标超出范围”错误。 我可以在前95个“I”上运行代码,即如果我转换第一部分:

For i = 4 To 95
        If Cells(i, 1) <> Cells(i - 1, 1) Then Clean_Stock_2 (i)
用于i=4到95
如果单元格(i,1)单元格(i-1,1),则清洁库存
代码:

**子外部_循环()
对于i=4到单元格(Rows.Count,1)。结束(xlUp)。行**
如果单元格(i,1)单元格(i-1,1),则清洁库存
接下来我
端接头
次清洁库存2(ByVal r长度)
Dim库存(31,5)
昏暗的四分之一(31)
Dim Bo作为布尔值
费用=0
'框架
对于i=0到31
库存(i,0)=单元(r,1)
库存(i,1)=单元(r,2)
库存(i,2)=单元(r,3)
股票(i,5)=“Q”和格式(日期添加(“Q”,i,#1/1/2011#),Q-YYYY)
季度(i)=库存(i,5)
接下来我
"数据,
Do While单元格(r,1)=库存(0,0)
Qu=“Q”和格式(单元格(r,4),“Q-YYYY”)
rr=应用程序匹配(Qu,季度,0)
如果不是IsError(rr),则
库存(rr,3)=单元(r,4)
库存(rr,4)=单元(r,5)
如果不是Bo,则费用=库存(rr,4):Bo=真
如果结束
r=r+1
环
“填充
对于i=0到31
如果库存(i,4)=0,则
库存(i,4)=费用
其他的
费用=库存(i,4)
如果结束
接下来我
"产出",
lr=单元格(行数,“I”)。结束(xlUp)。行数+1
lr=IIf(lr<3,3,lr)
单元格(lr,“I”)。调整大小(32,6)=库存
端接头

用F8单步执行,找出Clean_Stock_2中的哪一行产生错误。用F8单步执行,找出Clean_Stock_2中的哪一行产生错误。
**Sub Outer_Loop()
For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row**
    If Cells(i, 1) <> Cells(i - 1, 1) Then Clean_Stock_2 (i)
Next i
End Sub


Sub Clean_Stock_2(ByVal r As Long)

Dim Stock(31, 5)
Dim Quarter(31)
Dim Bo As Boolean

Charge = 0

'Frame
For i = 0 To 31
    Stock(i, 0) = Cells(r, 1)
    Stock(i, 1) = Cells(r, 2)
    Stock(i, 2) = Cells(r, 3)
    Stock(i, 5) = "Q" & Format(DateAdd("q", i, #1/1/2011#), "q-YYYY")
    Quarter(i) = Stock(i, 5)
Next i

'Data
Do While Cells(r, 1) = Stock(0, 0)
    Qu = "Q" & Format(Cells(r, 4), "q-YYYY")
    rr = Application.Match(Qu, Quarter, 0)
    If Not IsError(rr) Then
        Stock(rr, 3) = Cells(r, 4)
        Stock(rr, 4) = Cells(r, 5)
        If Not Bo Then Charge = Stock(rr, 4): Bo = True
    End If
    r = r + 1
Loop

'fill
For i = 0 To 31
    If Stock(i, 4) = 0 Then
        Stock(i, 4) = Charge
    Else
        Charge = Stock(i, 4)
    End If
Next i
'Output
lr = Cells(Rows.Count, "I").End(xlUp).Row + 1
lr = IIf(lr < 3, 3, lr)
Cells(lr, "I").Resize(32, 6) = Stock
End Sub