Arrays 为什么VBA提前退出我的for循环,为什么不退出';t细胞值是否正确存储在我的数组中?
我编写这个宏是为了从一个单独的工作簿中提取数据来进行字符串操作。(未显示)代码最终使用存储在创建的数组中的数据来创建工作指令。代码如下所示,其中一部分按预期工作(折弯阵列创建),第二部分不按预期工作(csk阵列创建)。当我单步执行代码时,它将不会转到“next I”,并在第一次迭代时完全退出if语句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 =
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