Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
Arrays 为什么VBA提前退出我的for循环,为什么不退出';t细胞值是否正确存储在我的数组中?_Arrays_Excel_Vba - Fatal编程技术网

Arrays 为什么VBA提前退出我的for循环,为什么不退出';t细胞值是否正确存储在我的数组中?

Arrays 为什么VBA提前退出我的for循环,为什么不退出';t细胞值是否正确存储在我的数组中?,arrays,excel,vba,Arrays,Excel,Vba,我编写这个宏是为了从一个单独的工作簿中提取数据来进行字符串操作。(未显示)代码最终使用存储在创建的数组中的数据来创建工作指令。代码如下所示,其中一部分按预期工作(折弯阵列创建),第二部分不按预期工作(csk阵列创建)。当我单步执行代码时,它将不会转到“next I”,并在第一次迭代时完全退出if语句 nbends = Application.WorksheetFunction.CountIf(Range("M6:M" & lastrow), "BEND RADIUS") ncsksf =

我编写这个宏是为了从一个单独的工作簿中提取数据来进行字符串操作。(未显示)代码最终使用存储在创建的数组中的数据来创建工作指令。代码如下所示,其中一部分按预期工作(折弯阵列创建),第二部分不按预期工作(csk阵列创建)。当我单步执行代码时,它将不会转到“next I”,并在第一次迭代时完全退出if语句

nbends = Application.WorksheetFunction.CountIf(Range("M6:M" & lastrow), "BEND RADIUS")
ncsksf = Application.WorksheetFunction.CountIf(Range("M6:M" & lastrow), "CSK FARSIDE")
ncsksn = Application.WorksheetFunction.CountIf(Range("M6:M" & lastrow), "CSK NEARSIDE")

ReDim Bends(1 To nbends, 1 To 5)
ReDim Csksn(1 To nscksn, 1 To 3)

'' Bend array creation
On Error Resume Next
Set r = Range("M6:M" & lastrow).Find(what:="BEND RADIUS", LookIn:=xlValues)
If Not r Is Nothing Then
    firstaddress = r.Address
    addressrow = Right(firstaddress, 2)
    Bends(1, 1) = Range("A" & addressrow)
    Bends(1, 2) = Range("C" & addressrow)
    Bends(1, 3) = Range("A" & addressrow + 1)
    Bends(1, 4) = Range("M" & addressrow + 1)
    Bends(1, 5) = Range("B" & addressrow + 1)
    Do
        For i = LBound(Bends) + 1 To UBound(Bends)
            Set r = Range("M" & addressrow & ":M" & lastrow).Find(what:="BEND RADIUS", LookIn:=xlValues)
            firstaddress = r.Address
            addressrow = Right(firstaddress, 2)
            Bends(i, 1) = Range("A" & addressrow)
            Bends(i, 2) = Range("C" & addressrow)
            Bends(i, 3) = Range("A" & addressrow + 1)
            Bends(i, 4) = Range("M" & addressrow + 1)
            Bends(i, 5) = Range("B" & addressrow + 1)
        Next i
    Loop While Not r Is Nothing And r.Address <> firstaddress
End If

'' Csks array creation
On Error Resume Next
Set r = Range("M6:M" & lastrow).Find(what:="CSK NEARSIDE", LookIn:=xlValues)
If Not r Is Nothing Then
    firstaddress = r.Address
    addressrow = Right(firstaddress, 2)
    Csksn(1, 1) = Range("A" & addressrow)
    Csksn(1, 2) = Range("B" & addressrow)
    Csksn(1, 3) = Range("M" & addressrow)
    Debug.Print addressrow
    Do
        For i = LBound(Csksn) + 1 To UBound(Csksn)
            Set r = Range("M" & addressrow & ":M" & lastrow).Find(what:="CSK NEARSIDE", LookIn:=xlValues)
            firstaddress = r.Address
            addressrow = Right(firstaddress, 2)
            Csksn(i, 1) = Range("A" & addressrow)
            Csksn(i, 2) = Range("B" & addressrow)
            Csksn(i, 3) = Range("M" & addressrow)
            Debug.Print r
            Debug.Print firstaddress
            Debug.Print addressrow
        Next i
    Loop While Not r Is Nothing And r.Address <> firstaddress
End If
我错过了什么?
感谢大家对错误的了解

下一步继续
隐藏错误。注释掉并重新运行-您是否收到错误?
对于i=LBound(Csksn,1)到UBound(Csksn,1)
<代码>对于j=LBound(Csksn,2)到UBound(Csksn,2)地址行=右(firstaddress,2)-否,使用
r.Row
获取行号。不需要从范围地址解析行。我不能将“j”嵌套到“i”中,因为我希望每个列中都有特定的数据。。我已经做了另外两个,但仍然有相同的问题。。在1次迭代后保留for循环,而不将数据保存到数组中。根据我的数据集,我应该有4行数据。而且,当我注释该行时,两个循环中都没有错误
For i = 2 To ncsksn
            Set r = Range("M" & addressrow & ":M" & lastrow).Find(what:="CSK NEARSIDE", LookIn:=xlValues)
            firstaddress = r.Address
            addressrow = Right(firstaddress, 2)
            Csksn(i, 1) = Range("A" & addressrow)
            Csksn(i, 2) = Range("B" & addressrow)
            Csksn(i, 3) = Range("M" & addressrow)
            Debug.Print r
            Debug.Print firstaddress
            Debug.Print addressrow
        Next i
    Loop While Not r Is Nothing And r.Address <> firstaddress
End If
For i = LBound(Csksn) To UBound(Csksn)
    For j = LBound(Csksn) To UBound(Csksn)
        Debug.Print i, j, Csksn(i, j)
    Next j
Next i