Visual Basic - VBA-Code, der die Regel überspringt oder ignoriert, wenn die Zelle einen bestimmten Wert enthält

1592
Lexi

Ich habe den folgenden VBA-Code geschrieben, um Spalte "P" automatisch mit "ausstehend", "Nicht fällig", "-" zu füllen, basierend auf dem Wert von Spalte "O".

Der Benutzer muss manuell "Fertigstellen" in Spalte "P" eingeben, wenn die Aufgabe erledigt ist. Dies wird nicht automatisch ausgefüllt.

Ich muss sicherstellen, dass die letzte Regel (wenn Spalte O "Ja" ist, dann "Anstehend" in Spalte P eingeben) übersprungen wird, wenn in Spalte "P" bereits "Abgeschlossen" steht.

Kann mir jemand bitte helfen? Ziemlich dringend Vielen Dank!

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
Ihr Code gibt nichts zurück, könnten Sie mir einfach schreiben, in welchen Zellen der Spalte P Sie Nein, - und Ja geschrieben haben. Rajesh S vor 6 Jahren 0

2 Antworten auf die Frage

2
LPChip

Sie können dies tun, indem Sie eine zusätzliche IF-Prüfung hinzufügen. Ich habe den Code auch optimiert, indem ich von 3 Schleifen zu 1 Schleife überging, so dass der Code dreimal schneller ist und die 3 Prüfungen in einem Auswahlfall platziert, so dass er einfacher zu lesen ist.

Ihr Code würde ungefähr so ​​aussehen:

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

Sie können diesen VBA-Code auch ausprobieren.

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: Sie geben den Eingabebereich für Nein, - und Ja ein : P1: P3.

Beim ersten Klicken wird Zelle O6: O8 mit Nicht fällig, - und ausstehend gefüllt .

Sobald Sie Complete in Zelle O8 schreiben, überspringt dieser Code Zelle O8.

Hinweis: Sie können den Eingabebereich und die Position des Zellenversatzes ändern.

Hoffe das dir helfen.

Denken Sie daran, dass ich diese Lösung veröffentlicht habe, nachdem sie von mir getestet wurde. Wenn jemand mit all dem nicht einverstanden ist, SCHREIBEN SIE DEN GRUND vor der ABSTIMMUNG.

Nicht hilfreich. Das ursprüngliche Code-Clear verwendet die Spalten O und P in derselben Zeile (wobei die Zeile mit 11 beginnt), aber Ihr Code verwendet die Zeilen 1 bis 3 für Spalte P und die Zeilen 6-8 für Spalte O. Beachten Sie auch die Verwendung von `Select Case` für die mehrfachen 'If'-Anweisungen. AJD vor 6 Jahren 2