1

Я написал следующий код VBA, чтобы автоматически заполнить столбец "P" "ожидающим", "Не подлежит оплате", «-» на основе значения столбца "O".

Пользователь должен будет вручную ввести "завершить" в столбец "P", если задача выполнена. Это не заполняется автоматически.

Мне нужно убедиться, что последнее правило (если в столбце O указано "да", введите "в ожидании в столбец P"), если в столбце "P" уже указано "Complete".

Кто-нибудь может мне помочь? Довольно срочно. Спасибо!

Sub info()
    Dim i As Long
    For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row
        If ActiveSheet.Cells(i, 15) = "No" Then
            ActiveSheet.Range("P" & i) = "Not due"
        End If
    Next i
    For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row
        If ActiveSheet.Cells(i, 15) = "-" Then
            ActiveSheet.Range("P" & i) = "-"
        End If
    Next i
    **For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row
        If ActiveSheet.Cells(i, 15) = "Yes" Then
            ActiveSheet.Range("P" & i) = "Pending"
        End If**
    Next i
End Sub

2 ответа2

2

Вы можете сделать это, добавив дополнительную проверку IF. Я также оптимизировал код, перейдя от 3 циклов к 1 циклу, чтобы код был в 3 раза быстрее, и поместил 3 проверки в один случай выбора, чтобы его было проще читать.

Ваш код будет выглядеть примерно так:

Sub info()
    Dim i As Long
    For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row

        Select case ActiveSheet.Cells(i, 15)
            Case is "No"
                ActiveSheet.Range("P" & i) = "Not due"

            Case is "-"
                ActiveSheet.Range("P" & i) = "-"

            Case is "Yes"
                If not ActiveSheet.Range("P" & i) = "Complete" then
                    ActiveSheet.Range("P" & i) = "Pending"
                End if

        End Select

    Next i
End Sub
0

Вы также можете попробовать этот код VBA.

Private Sub CommandButton3_Click()

Dim rng As Range
Set rng = Range("P1:P3")

 For Each r In rng
   v = r.Value

     If v = "No" Then
       r.Offset(5, 1).Value = "Not Due"
     End If

     If v = "-" Then
       r.Offset(5, 1).Value = "- -"
     End If

     If v = "Yes" Then
       If r.Offset(5, 1).Value = "Complete" Then Exit Sub
       r.Offset(5, 1).Value = "Pending"

     End If

 Next r

End Sub

NB: Вы Диапазон входного для Нет, - и Да P1:P3.

При первом щелчке в ячейке O6:O8 появится надпись Not Due, - и Pending.

Как только вы напишите « Complete» в ячейке O8, этот код пропустит ячейку O8.

Примечание. Вы можете изменить диапазон входного сигнала и положение смещения ячейки.

Надеюсь, это поможет вам.

Помните, что я опубликовал это решение после того, как оно было протестировано мной. Если кто-то не согласен со всем этим, НАПИШИТЕ ПРИЧИНУ перед ГОЛОСОВАНИЕМ ВНИЗ.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .