2016-12-29 41 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,但現在我得到一個編譯錯誤。 –