почему VBA завершает работу my для l oop рано и почему значения ячеек не сохраняются в моем массиве должным образом? - PullRequest
0 голосов
/ 15 января 2020

Я написал этот макрос для извлечения данных из отдельной рабочей книги для выполнения некоторых операций со строками. (Не показано) В конечном итоге код использует данные, хранящиеся в массивах, созданных для создания рабочих инструкций. Код, показанный ниже, с одним разделом, работающим как задумано (создание массива сгиба), второй раздел не будет (создание массива csk). Когда я шагаю по коду, он не будет go к «следующему 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

Я исправил это, изменив параметры для l oop

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

, и он будет печатать значения для каждой переменной (r, firstaddress, addressrow) на каждой итерации цикла for; но когда я go печатаю массив, используя эту l oop, ничего не появляется.

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

Чего мне здесь не хватает? Спасибо всем за ваши знания

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...