Цикл определенного кода по каждой строке до последней строки данных - PullRequest
0 голосов
/ 09 июля 2019

В настоящее время у меня есть 3 макроса, которые работают для моей первой строки. Я прикрепил их ниже. Теперь я хочу создать цикл, чтобы этот код выполнялся для всех строк до последней строки ввода. Он печатает то, чего не хватает, когда в столбцах B, D и E. обнаружена пустая ячейка (в конечном итоге я добавлю три макроса в один, чтобы сделать ее более краткой)

Это правильный код для первой строки

Sub error_field()
    Sheets("1099-Misc_Form_Template").Select
    Range("A2").Select
    If Range("A2").Value = "" Then
    ActiveCell.Value = ActiveCell.Value & "PayorID"
    End If
End Sub

'checking if TIN is empty
Sub error_field2()
    Sheets("1099-Misc_Form_Template").Select
    Range("A2").Select
    If Range("E2").Value = "" Then
    ActiveCell.Value = ActiveCell.Value & ", TIN"
    End If
End Sub

'checking if AccountNo is empty
Sub error_field3()
    Sheets("1099-Misc_Form_Template").Select
    Range("A2").Select
    If Range("F2").Value = "" Then
    ActiveCell.Value = ActiveCell.Value & ", AccountNo"
    End If
End Sub

Вот что я пробовал для цикла:


'repeating for all rows
Sub repeat_all_rows()
Dim sh As Worksheet
Dim rw As Range
Dim RowCount As Integer

RowCount = 0

Set sh = ActiveSheet
For Each rw In sh.Rows

  If Range("A2").Value = "" Then
    ActiveCell.Value = ActiveCell.Value & "PayorID"
  If Range("E2").Value = "" Then
    ActiveCell.Value = ActiveCell.Value & ", TIN"
  If Range("F2").Value = "" Then
    ActiveCell.Value = ActiveCell.Value & ", AccountNo"
    Exit For
  End If

  RowCount = RowCount + 1

Next rw

End Sub

Я хочу написать код, который будет работать для всех строк, пока не будет найден последний ряд данных. Успокойся, я новичок, поэтому знаю, что мой код, наверное, отстой.

1 Ответ

1 голос
/ 09 июля 2019

Примерно так должно работать:

'repeating for all rows
Sub repeat_all_rows()

    Dim sh As Worksheet
    Dim rw As Range
    Dim RowCount As Integer

    RowCount = 0

    Set sh = ActiveSheet
    For Each rw In sh.UsedRange.Rows

        FlagMissing rw, "A", "Payor ID"
        FlagMissing rw, "E", "TIN"
        FlagMissing rw, "F", "AccountNo"

    Next rw

End Sub

Sub FlagMissing(rw As Range, col as String, Flag As String)
    If Len(Trim(rw.cells(1, col).value)) = 0 Then
        With rw.Cells(1)
            'add the flag with a comma if there's already content there
            .Value = .Value & IIf(.Value="", "", ", ") & Flag
        End with
    End If
End sub

... хотя я не учел это Exit For в вашем опубликованном коде.

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