VBA не собирается до конца, если функция - PullRequest
0 голосов
/ 08 января 2020

У меня есть макрос, который проверяет, являются ли строки пустыми, и если нет, то печатает область на отдельном листе. Ниже я попытался запустить компьютер через каждую строку и выполнить тест if. Я ожидал, что он распечатает два листа (поскольку значения имеют только H2 и H3), но он напечатает только первый ряд. Чего мне не хватает, чтобы распечатать две страницы (или столько страниц, сколько строк заполнено)?

If IsEmpty(Range("H2").Value) = False Then
   Worksheets("Document").Range("A1:I45").PrintOut

ElseIf IsEmpty(Range("H3").Value) = False Then
   Worksheets("Document").Range("j1:r45").PrintOut

ElseIf IsEmpty(Range("H4").Value) = False Then
   Worksheets("Document").Range("s1:aa45").PrintOut

ElseIf IsEmpty(Range("H5").Value) = False Then
   Worksheets("Document").Range("ab1:aj45").PrintOut

ElseIf IsEmpty(Range("H6").Value) = False Then
   Worksheets("Document").Range("Ak1:as45").PrintOut

ElseIf IsEmpty(Range("H7").Value) = False Then
   Worksheets("Document").Range("At1:bb45").PrintOut

ElseIf IsEmpty(Range("H8").Value) = False Then
   Worksheets("Document").Range("bc1:bk45").PrintOut

ElseIf IsEmpty(Range("H9").Value) = False Then
   Worksheets("Document").Range("bl1:bt45").PrintOut

ElseIf IsEmpty(Range("H10").Value) = False Then
   Worksheets("Document").Range("A51:I100").PrintOut

ElseIf IsEmpty(Range("H11").Value) = False Then
   Worksheets("Document").Range("j51:r100").PrintOut

ElseIf IsEmpty(Range("H12").Value) = False Then
   Worksheets("Document").Range("s51:aa100").PrintOut

ElseIf IsEmpty(Range("H13").Value) = False Then
   Worksheets("Document").Range("ab51:aj100").PrintOut

ElseIf IsEmpty(Range("H14").Value) = False Then
   Worksheets("Document").Range("Ak51:as100").PrintOut

ElseIf IsEmpty(Range("H15").Value) = False Then
   Worksheets("Document").Range("At51:bb100").PrintOut

ElseIf IsEmpty(Range("H16").Value) = False Then
   Worksheets("Document").Range("bc51:bk100").PrintOut

ElseIf IsEmpty(Range("H17").Value) = False Then
   Worksheets("Document").Range("bl51:bt100").PrintOut


End If
End Sub```

1 Ответ

2 голосов
/ 08 января 2020

Как указано IF разрешается последовательно и как таковой, когда находит первое утверждение True, он делает это и пропускает остальные. Вы не хотите ElseIf, вам нужны отдельные If заявления.

If IsEmpty(Range("H2").Value) = False Then
   Worksheets("Document").Range("A1:I45").PrintOut
End If

If IsEmpty(Range("H3").Value) = False Then
   Worksheets("Document").Range("j1:r45").PrintOut
End If
...

Но вы можете использовать al oop:

Dim i As Long
For i = 2 To 9
    If ActiveSheet.Range("H" & i) = "" Then
        ActiveSheet.Range("A1:I45").Offset(0, (i - 2) * 9).PrintOut
    End If
Next i
    For i = 10 To 17
    If ActiveSheet.Range("H" & i) = "" Then
        ActiveSheet.Range("A51:I100").Offset(0, (i - 10) * 9).PrintOut
    End If
Next i

Это предполагает, что область распечатки всегда одинакового размера и одинакового расстояния.

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