Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 基于其他两列更改两列中的值_Vba_Excel - Fatal编程技术网

Vba 基于其他两列更改两列中的值

Vba 基于其他两列更改两列中的值,vba,excel,Vba,Excel,我将这段代码拼凑在一起,以基于另外两个单元格更改两个单元格中的值。如何使此代码应用于整个列范围 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" Th

我将这段代码拼凑在一起,以基于另外两个单元格更改两个单元格中的值。如何使此代码应用于整个列范围

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
比如:

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

我如何让这个代码应用于整个列范围?你能更具体一点吗?我认为(我不是一个读心术的人)你想要将代码应用于整个列N(和列“CH”…)。只需对lRow=6到最后一行使用
,然后对范围(“N”&lRow)使用
。值如“FINISH”…
,您就可以计算出rest,抱歉没有具体说明。我是vba新手。我正在尝试获取应用于列范围的代码。抱歉,没有具体说明。我是vba新手。我正在尝试将代码应用于列范围N6:N45以及列CH、CL和CO中的相邻单元格。代码似乎可以工作,但每当我在其他任何地方输入数据时,它会将整个工作表冻结几分钟。是的,只要您更改任何内容,都可以使用“工作表更改”事件。如果您希望每次更改一个单元格时都能执行此操作,那么您必须将
d
更改为
Target.Row
而不是循环,您还可以测试列等。我将d更改为Target.Row,但现在我得到一个编译错误。@IDesp Tim用来捕获已修改列的方式,假设您只希望在有人修改了N列中的任何内容时运行代码,然后在代码的开头添加行
if Target。第14列然后退出Sub
对不起,我现在正在移动,但如果您早上还没有收到,我会为您编辑它。