我编写了以下 VBA 代码,根据“O”列的值自动在“P”列中填充“待定”、“未到期”、“-”。
如果任务已完成,用户必须手动在“P”列中输入“完成”。此项不会自动填充。
我需要确保如果“P”列已经显示“完成”,则跳过最后一条规则(如果O列为“是”,则输入“待定到P列”)。
有人能帮我吗?相当紧急。谢谢!
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
您可以通过添加额外的 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
答案2
您也可以尝试这个 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
注意: 您输入的范围不,-和是的是 P1:P3。
第一次点击将填充单元格 O6:O8未到期,--和待办的。
你一写完全的在单元格 O8 中,此代码将跳过单元格 O8。
笔记,您可以改变输入范围和单元格偏移位置。
希望这对你有帮助。
请记住,我是在测试过后才发布此解决方案的。如果有人不同意这一切,请在反对之前写下原因。