Скрипт VBA, использующий оператор For Loop и If / Then - PullRequest
0 голосов
/ 08 ноября 2019

Я все еще новичок в VBA и в настоящее время пишу код, чтобы попытаться проверить, имеет ли столбец определенное значение в каждой строке. Это требует использования цикла for и оператора if / then.

Я написал скрипт, но когда я его выполняю, он ничего не делает. Может ли кто-нибудь помочь мне проверить, правильно ли написан мой код?

Sub TestCheck()

    Dim Rng As Range
    Dim xlsheet As Object
    Dim c As Range
    Dim LastRow As Long

    'Checks each cell value in column A for string - "Iris Concept of Operations"'
    n = 0

    Set xlsheet = ActiveSheet
    With xlsheet
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

    If .Cells(.Rows.Count, "A").End(xlUp).Row = 0 Then
        MsgBox "The spreadsheet doesn't work"
        GoTo ExitHere

        Set Rng = .Range(LastRow).Offset(n, 0)

        For Each c In Rng
            n = n + 1

            If InStr(c.Value, "Iris Concept of Operations") > 0 Then
                With xlsheet
                    .Range("A1").Offset(n, 8) = c.ClearContents
                End With
            Else
                With xlsheet
                    .Range("A1").Offset(n, 2) = c.ClearContents
                End With
            End If
        Next c

    End If

    ExitHere:
        Set xlsheet = Nothing
        Set Rng = Nothing
    End With

End Sub

1 Ответ

2 голосов
/ 08 ноября 2019

End If находится не в том месте. Правильный отступ вашего кода покажет это. Прямо сейчас ваш цикл находится внутри If...End If, и вы выходите, прежде чем нажать на цикл.

If .Cells(.Rows.Count, "A").End(xlUp).Row = 0 Then
    MsgBox "The spreadsheet doesn't work"
    GoTo ExitHere
End If  ' Move the End If here.

Кроме того, нет строки 0. Ваше условие никогда не может быть истинным.

.Cells(.Rows.Count, "A").End(xlUp).Row = 0

Кроме того, это проблематично:

Set Rng = .Range(LastRow).Offset(n, 0)

LastRow не является действительной ссылкой Range. Кроме того, если вы Offset из одной ячейки, результат все равно будет одна ячейка, поэтому вы не будете проходить через несколько ячеек.

И это также проблематично:

.Range("A1").Offset(n, 8) = c.ClearContents

ClearContents ничего не возвращает и не должно совпадать с =.

Короче, я бы посоветовал разбить это на более мелкие части, которые вы можетеначать работать самостоятельно.

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