Почему мой сценарий останавливается на этом True / False, чтобы соответствовать двум значениям? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть приложение, созданное, где появляется диалоговое окно, запрашивает около двух значений в двух столбцах на листе 2. Если они оба совпадают, появляется окно с сообщением, а затем другие экземпляры с другими сообщениями. Когда я набираю код работы, он совпадает с этим кодом работы, но в этом коде могут быть выровнены несколько центров затрат. Мой код останавливается в первой строке, где происходит это совпадение, но не перебирает все строки, чтобы посмотреть, сможет ли он найти центр затрат. Он возвращает сообщение «найден, но не подходит для этого центра затрат», но не завершает цикл, чтобы действительно знать или нет.

Что мне нужно изменить здесь, чтобы убедиться, что оно не вызывает преждевременное срабатывание этого сообщения?

Он говорит, что rFound находит код задания, но этот код задания имеет 4 строки для каждого подходящего МВЗ, охватывающего строки 211-14. Он останавливается на строке 211, затем не пытается просмотреть остальные 3 строки, в которых совпадает rFound. Код:

Option Explicit

Sub tgr()

Dim rFound As Range
Dim lJobCode As String
Dim lFLSA As String
Dim lCC As String
Dim sFirst As String
Dim sResults As String
Dim sh As Worksheet
Dim matched As Boolean
Dim Y As Integer, Z As Integer

lJobCode = Application.InputBox("Please provide a job code", "Job Code", Type:=2)
lCC = Application.InputBox("Please enter in a cost-center", "CC", Type:=2)

If lJobCode = "False" Or lCC = "False" Then Exit Sub 'Pressed cancel

Set sh = Sheets("Sheet1")

With ThisWorkbook.Worksheets("Sheet2").Columns("A")

    Set rFound = .Find(lJobCode, .Cells(.Cells.Count), xlValues, xlWhole)

    If Not rFound Is Nothing Then

        If ThisWorkbook.Worksheets("Sheet2").Cells(rFound.Row, 3).Value = lCC Then

            matched = True

            If rFound.Offset(, 4).Value = "Exempt" And Y = 0 Then
                MsgBox "Exempt roles may be eligible for schedule pay allowance."
                Y = 1

            Exit Sub 'if criteria is met, display above msgbox and then exit sub after user clicks ok or cancel

            End If

            If rFound.Offset(, 5).Value = "Eligible - Employee Level" And Z = 0 Then
                MsgBox "This job is only eligible at the employee level."
                Z = 1

            Exit Sub

            End If

            MsgBox "Job Code (" & lJobCode & ") is eligible for this cost-center."

        End If

        If Not matched Then MsgBox "Job Code (" & lJobCode & ") found, but not eligible for this cost-center."

    Else
        MsgBox "Job Code (" & lJobCode & ") not eligible."
    End If

End With

End Sub

1 Ответ

1 голос
/ 20 мая 2019

В вашем коде много неиспользуемых переменных (возможно, это упрощено по сравнению с тем, что вы на самом деле пытаетесь сделать?), Поэтому я удалил все лишние вещи.Основываясь на ваших комментариях и оригинальном предоставленном коде, вот что, на мой взгляд, вы на самом деле ищете:

Sub tgr()

    Dim wsData As Worksheet
    Dim rFound As Range
    Dim lJobCode As String
    Dim lCC As String
    Dim sFirst As String
    Dim matched As Boolean

    lJobCode = Application.InputBox("Please provide a job code", "Job Code", Type:=2)
    If lJobCode = "False" Then Exit Sub 'Pressed cancel
    lCC = Application.InputBox("Please enter in a cost-center", "CC", Type:=2)
    If lCC = "False" Then Exit Sub 'Pressed cancel

    matched = False
    Set wsData = ThisWorkbook.Worksheets("Sheet2")
    Set rFound = wsData.Columns("A").Find(lJobCode, wsData.Cells(wsData.Rows.Count, "A"), xlValues, xlWhole)

    If Not rFound Is Nothing Then
        sFirst = rFound.Address
        Do
            If rFound.Offset(, 2).Value = lCC Then
                matched = True

                If rFound.Offset(, 4).Value = "Exempt" Then
                    MsgBox "Exempt roles may be eligible for schedule pay allowance."
                    Exit Sub 'if criteria is met, display above msgbox and then exit sub after user clicks ok or cancel
                End If

                If rFound.Offset(, 5).Value = "Eligible - Employee Level" Then
                    MsgBox "This job is only eligible at the employee level."
                    Exit Sub
                End If

                MsgBox "Job Code (" & lJobCode & ") is eligible for this cost-center."
                Exit Sub
            End If
            Set rFound = wsData.Columns("A").FindNext(rFound)
        Loop While rFound.Address <> sFirst
        If Not matched Then MsgBox "Job Code (" & lJobCode & ") found, but not eligible for this cost-center."
    Else
        MsgBox "Job Code (" & lJobCode & ") not eligible."
    End If

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