以下代码有效,但现在我需要它才能用于列范围而不是单个单元格范围。 我需要替换:
CJ3单细胞至CJ柱(从第3行开始);
CK3单细胞至CK柱(从第3行开始);
CM3单细胞到CM列(从第3行开始);
CN3单细胞到CN柱(从第3行开始);
CO3单细胞到CO柱(从第3行开始)。
请有人帮忙吗?
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("CJ3").Value = "FOLLOW UP" And Range("CM3").Value = "" And Range("CN3").Value = "" Then
Range("CO3").Value = "FOLLOW UP"
ElseIf Range("CJ3").Value = "FOLLOW UP" And Range("CM3").Value > 0 And Range("CN3").Value = "" Then
Range("CO3").Value = "AWAITING APPROVAL"
ElseIf Range("CJ3").Value = "FOLLOW UP" And Range("CM3").Value > 0 And Range("CN3").Value > 0 Then
Range("CO3").Value = "CLOSED"
ElseIf Range("CJ3").Value = "NO FOLLOW UP" And Range("CN3").Value = "" Then
Range("CO3").Value = "AWAITING APPROVAL"
Range("CK3:CM3").Value = "N/A"
ElseIf Range("CJ3").Value = "NO FOLLOW UP" And Range("CN3").Value > 0 Then
Range("CO3").Value = "CLOSED"
Range("CK3:CM3").Value = "N/A"
End If
End Sub
答案 0 :(得分:0)
我建议您指定代码应该使用的工作表。默认情况下是ActiveSheet。因此,我的代码与您的代码几乎没有什么不同。不同之处在于它是专门写下来的,这将有助于您了解自己的代码,从而加快故障排除(无论如何,这总是比编写代码需要更多的时间)。您还可以指定另一个工作表。例如,Set Ws = Worksheets("Sheet1")
。这样会好得多,因为代码无法在另一张纸上做错误。
所以,这就是你的代码现在的样子。
Private Sub TryLoop()
Dim Ws As Worksheet
Dim Rl As Long ' last row
Dim R As Long ' row
Set Ws = ActiveSheet
With Ws
Rl = .Cells(.Rows.Count, 1).End(xlUp).Row
For R = 1 To Rl
If .Cells(R, 88).Value = "FOLLOW UP" And .Cells(R, 91).Value = "" And .Cells(R, 92).Value = "" Then
.Cells(R, 93).Value = "FOLLOW UP"
End If
Next R
End With
End Sub
Rows.Count
返回活动工作表中的行数(如果已指定,则返回Ws
)。根据您使用的Excel版本,至少为65,000行。是的,这需要一些时间才能完成。因此,上述封面将循环限制为实际在第1列中具有值的那些行(即列#34; A")。您也可以像这样编写此行Rl = .Cells(.Rows.Count, "A").End(xlUp).Row
。
现在我觉得你的代码很完美。什么是不做的?