Как реализовать это еще, если линия? - PullRequest
1 голос
/ 03 апреля 2019

Я не могу на всю жизнь понять, куда поместить этот оператор Else или Else If в этом блоке операторов IF.Краткое изложение: если я найду значение, которое я ввожу в поле ввода в обозначенных строках, заполните выбранные данные из этой строки на указанном мной листе.Другой оператор if после этого опирается на другое значение (для дальнейшей фильтрации результатов).

Это прекрасно работает, но я просто хочу заполнить поле сообщения, если код задания, который я ввел, существует, но не основывается на значении второго оператора IF.Сейчас он просто не заполняет данные, но это может создать иллюзию, что что-то сломано, а не соответствует всем критериям.

Я хочу добавить что-то вроде Else if .... msg box "Job code exists, but not under this EC member между вторым оператором if с отступом (после цикла Do / while) здесь:

    If Not rFound Is Nothing Then
        sFirst = rFound.Address

        Do
            If ThisWorkbook.Worksheets("Sheet2").Cells(rFound.Row, 5).Value = lLob Then
                sh.Cells(rw, 4) = rFound.Offset(, 0).Value
                sh.Cells(rw, 5) = rFound.Offset(, 1).Value
                sh.Cells(rw, 6) = rFound.Offset(, 3).Value
                sh.Cells(rw, 7) = rFound.Offset(, 5).Value
                sh.Cells(rw, 8) = rFound.Offset(, 6).Value
                sh.Cells(rw, 9) = rFound.Offset(, 7).Value

                rw = rw + 1

            End If
            Set rFound = .FindNext(rFound)

        Loop While rFound.Address <> sFirst

    Else
        MsgBox "Job Code [" & lJobCode & "] not eligible.", , "Error"
    End If

весь код:

Sub tgr()

Dim rFound As Range
Dim lJobCode As String
Dim lLob As String
Dim sFirst As String
Dim sResults As String
Dim sh As Worksheet
Dim rw As Long

lJobCode = Application.InputBox("Please provide a job code", "Job Code", Type:=2)
lLob = Application.InputBox("Please select EC Member", "EC Member", Type:=2)
If lJobCode = "False" Or lLob = "False" Then Exit Sub   'Pressed cancel

Set sh = Sheets("Sheet1")
rw = 8
With ThisWorkbook.Worksheets("Sheet2").Columns("A")
    Set rFound = .Find(lJobCode, .Cells(.Cells.Count), xlValues, xlWhole)

    If Not rFound Is Nothing Then
        sFirst = rFound.Address

        Do
            If ThisWorkbook.Worksheets("Sheet2").Cells(rFound.Row, 5).Value = lLob Then
                sh.Cells(rw, 4) = rFound.Offset(, 0).Value
                sh.Cells(rw, 5) = rFound.Offset(, 1).Value
                sh.Cells(rw, 6) = rFound.Offset(, 3).Value
                sh.Cells(rw, 7) = rFound.Offset(, 5).Value
                sh.Cells(rw, 8) = rFound.Offset(, 6).Value
                sh.Cells(rw, 9) = rFound.Offset(, 7).Value

                rw = rw + 1

            End If
            Set rFound = .FindNext(rFound)

        Loop While rFound.Address <> sFirst

    Else
        MsgBox "Job Code [" & lJobCode & "] not eligible.", , "Error"
    End If

End With

End Sub

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019
With ThisWorkbook.Worksheets("Sheet2").Columns("A")
    Set rFound = .Find(lJobCode, .Cells(.Cells.Count), xlValues, xlWhole)

    If Not rFound Is Nothing Then
        sFirst = rFound.Address

        dim lobFoundCount as integer
        lobFoundCount = 0

        Do
            If ThisWorkbook.Worksheets("Sheet2").Cells(rFound.Row, 5).Value = lLob Then
                lobFoundCount = lobFoundCount + 1

                sh.Cells(rw, 4) = rFound.Offset(, 0).Value
                sh.Cells(rw, 5) = rFound.Offset(, 1).Value
                sh.Cells(rw, 6) = rFound.Offset(, 3).Value
                sh.Cells(rw, 7) = rFound.Offset(, 5).Value
                sh.Cells(rw, 8) = rFound.Offset(, 6).Value
                sh.Cells(rw, 9) = rFound.Offset(, 7).Value

                rw = rw + 1
            End If
            Set rFound = .FindNext(rFound)

        Loop While rFound.Address <> sFirst

        If lobFoundCount = 0 Then 'No rows have matching lob
            Msgbox("job code exists but not under this ec member")
        End If
    Else
        MsgBox "Job Code [" & lJobCode & "] not eligible.", , "Error"
    End If

End With
0 голосов
/ 03 апреля 2019

Вы хотите ввести флаг для захвата состояния, означающего «Найдено lJobCode, но нет соответствия для lJob», затем установите этот флаг на True, когда внутреннее условие выполнено, и после того, как вы прошли все результаты поиска.введите MsgBox, если флаг все еще False.

Dim matched As Boolean
If Not rFound Is Nothing Then
    sFirst = rFound.Address

    Do
        If ThisWorkbook.Worksheets("Sheet2").Cells(rFound.Row, 5).Value = lLob Then
            matched = True
            '...
        End If
    Loop While ...

    If Not matched Then MsgBox "Your new message here"

 Else
    MsgBox "Job Code [" & lJobCode & "] not eligible.", , "Error"
 End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...