Как я могу перейти на лист, если диапазон говорит «Fail» в любой ячейке? - PullRequest
0 голосов
/ 24 июня 2019

Я создаю форму ввода данных и ищу, если какой-либо из результатов скажет «не удалось» отправить пользователя на другой лист для дополнительного тестирования, но если все они пройдут, чтобы продолжить как обычно.

Я пробовал, если If Range ("R5: R20") = Fail Then

Но это дает сбой.

 Sub RecordBathTest()

Application.ScreenUpdating = False

Workbooks.Open Filename:= _
    "G:\QA\Compliance\Bath Testing\Results\Form 8241B - Bath Test 
Log.xlsx"
Windows("Data Entry Log.xlsm").Activate
Range("D5:S20").Select
Selection.Copy
Windows("Form 8241B - Bath Test Log.xlsx").Activate
Sheets("2019").Select
Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues
Windows("Data Entry Log.xlsm").Activate
Application.CutCopyMode = False
If Range("R5:R20").Value = "Fail" Then

Sheets("Bath Test Failure Log").Select

 Else
  Range("D5:E20,G5:P20,R5:S20").Select
Selection.ClearContents
Windows("Form 8241B - Bath Test Log.xlsx").Activate
ActiveWorkbook.Save
ActiveWindow.Close
Windows("Data Entry Log.xlsm").Activate
Sheets("Test Start").Select
ActiveWorkbook.Save

End If

End Sub

Я получаю

Ошибка времени выполнения '13':
Несоответствие типов

И это говорит, что это не нравитсямой выбор диапазона если заявление

1 Ответ

2 голосов
/ 24 июня 2019

Вы не можете оценивать ячейки в диапазоне одновременно - вам нужно пройти каждую ячейку в диапазоне и оценить одну за другой.Это можно сделать с помощью цикла for (подумайте для каждой из ячеек от R5 до R20, найдите значение «Fail» ).Замените следующие строки:

If Range("R5:R20").Value = "Fail" Then

Sheets("Bath Test Failure Log").Select

 Else
  Range("D5:E20,G5:P20,R5:S20").Select
Selection.ClearContents
Windows("Form 8241B - Bath Test Log.xlsx").Activate
ActiveWorkbook.Save
ActiveWindow.Close
Windows("Data Entry Log.xlsm").Activate
Sheets("Test Start").Select
ActiveWorkbook.Save

End If

на

check = 0
For Each cell In Range("R5:R20")
    If cell.Value = "Fail" Then
        check = 1
        Exit For
    End If
Next cell

If check = 1 Then
    Sheets("Bath Test Failure Log").Select
Else
    Range("D5:E20,G5:P20,R5:S20").Select
    Selection.ClearContents
    Windows("Form 8241B - Bath Test Log.xlsx").Activate
    ActiveWorkbook.Save
    ActiveWindow.Close
    Windows("Data Entry Log.xlsm").Activate
    Sheets("Test Start").Select
    ActiveWorkbook.Save
End If

Это должно решить вашу непосредственную проблему, но я бы посоветовал реструктурировать ваш код, чтобы ссылаться на объекты, а не использовать активацию и пытаться избежатьSelect где возможно

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