2016-12-29 39 views
0

我已将这些代码拼凑在一起,以基于两个其他单元更改两个单元格中的值。我如何得到这个代码适用于整个列范围?基于另外两列更改两列中的值

Private Sub Worksheet_Change(ByVal Target As Range) 

On Error GoTo ErrorHandler 

    If Range("N6").Value Like "FINISH" And Not Range("CL6").Value Like "BK WALL" Or Not Range("CL6").Value Like "INTG" Then 
     Application.EnableEvents = False 
     Range("CH6").Value = "Y" 
End If 
     Application.EnableEvents = True 
    If Not Range("N6").Value Like "FINISH" Or Range("CL6").Value Like "BK WALL" Or Range("CL6").Value Like "INTG" Then 
     Application.EnableEvents = False 
     Range("CH6").Value = "X" 
     Range("CO6").Value = "" 
End If 

ErrorExit: 
    Application.EnableEvents = True 
Exit Sub 
ErrorHandler: 
    Debug.Print Err.Number & vbNewLine & Err.Description 
    Resume ErrorExit 
On Error GoTo ErrorHandler 


End Sub 
+1

*如何获得此代码应用到整个列范围* - 你可以更具体一点吗? –

+0

我想(我不是一个心灵读者),你想要将代码应用到整个Columm N(和列“CH”...)。只需使用'For lRow = 6到LastRow',然后'如果Range(“N”&lRow).Value就像“FINISH”...一样,你可以找出其余 –

+0

的遗憾。我新vba.i'm试图让代码适用于列范围 –

回答

0

喜欢的东西:

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim dStart As Double, dFinish As Double, d As Double 

On Error GoTo ErrorHandler 

dStart = 6 
dFinish = Range("N" & dStart).CurrentRegion.Rows.Count + dStart - 1 
'You could just hard-code in dFinish = 45 here if you want... 


For d = dStart To dFinish 

    If Range("N" & d).Value Like "FINISH" And Not Range("CL" & d).Value Like "BK WALL" Or Not Range("CL6").Value Like "INTG" Then 
     Application.EnableEvents = False 
     Range("CH" & d).Value = "Y" 
    End If 

    Application.EnableEvents = True 

    If Not Range("N" & d).Value Like "FINISH" Or Range("CL" & d).Value Like "BK WALL" Or Range("CL" & d).Value Like "INTG" Then 
     Application.EnableEvents = False 
     Range("CH" & d).Value = "X" 
     Range("CO" & d).Value = "" 
    End If 

Next 

ErrorExit: 
    Application.EnableEvents = True 
Exit Sub 
ErrorHandler: 
    Debug.Print Err.Number & vbNewLine & Err.Description 
    Resume ErrorExit 
On Error GoTo ErrorHandler 


End Sub 
+0

代码似乎能够工作,但它冻结了整个表单每当我在其他地方输入数据时,只需几分钟。 –

+0

嗯,是的,任何时候改变任何东西都会使用Worksheet_Change事件。如果您只想在每次更改之后的某个单元格时执行此操作,则必须将'd'更改为'Target.Row'而不是循环,并且还可以测试列等。 –

+0

我改变了d为target.row,但现在我得到一个编译错误。 –