Visual Basic - код VBA для пропуска или игнорирования правила, если ячейка содержит определенное значение

1471
Lexi

Я написал следующий код 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 
1
Ваш код ничего не возвращает, не могли бы вы просто написать мне, в каких ячейках столбца P вы написали «Нет» - и «Да». Rajesh S 6 лет назад 0

2 ответа на вопрос

2
LPChip

Вы можете сделать это, добавив дополнительную проверку 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
Rajesh S

Вы также можете попробовать этот код 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.

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

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

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

Не полезно. Исходный код очистки использует столбцы O и P в одной и той же строке (строка начинается с 11), но ваш код использует строки 1–3 для столбца P и строки 6–8 для столбца O. Также - рассмотрите возможность использования `Select Case` для множественных операторов If. AJD 6 лет назад 2

Похожие вопросы