Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Loops If-Then语句在Sub和调用过程之间循环_Loops_If Statement_Method Call - Fatal编程技术网

Loops If-Then语句在Sub和调用过程之间循环

Loops If-Then语句在Sub和调用过程之间循环,loops,if-statement,method-call,Loops,If Statement,Method Call,伙计们,我需要一些帮助 我有一个子过程,用于检测工作表G列中的数据验证,并根据C列中的值(STD或OPT)触发msgbox。这部分工作正常,但我试图在将C列从“OPT”切换回“STD”时,将一个值(PAINT,WHT)返回(如果该值发生变化)到G列。逻辑似乎没有那么复杂,但当我放置一个if…Then语句时,它不断地想要返回到调用过程,并为我的规范表中的每个后续行重复该过程。基本上,当我运行主过程时,它调用并运行子过程,但在操作(在IF语句中)完成和整个主过程完成之前,我必须按Enter大约45次

伙计们,我需要一些帮助

我有一个子过程,用于检测工作表G列中的数据验证,并根据C列中的值(STD或OPT)触发msgbox。这部分工作正常,但我试图在将C列从“OPT”切换回“STD”时,将一个值(PAINT,WHT)返回(如果该值发生变化)到G列。逻辑似乎没有那么复杂,但当我放置一个if…Then语句时,它不断地想要返回到调用过程,并为我的规范表中的每个后续行重复该过程。基本上,当我运行主过程时,它调用并运行子过程,但在操作(在IF语句中)完成和整个主过程完成之前,我必须按Enter大约45次。有人可以查看我的代码以了解为什么会发生这种情况吗?我已经用尽了我的知识,花了太多的时间试图纠正这个问题

这是我的Sub中的代码:

Sub VerifyDVG()

    Dim aCl As Range
    Dim ws As Worksheet
    Dim dvG As Range
    Dim Cv As String
    Dim msgS As String
    Dim msgO As String
    Dim Title As String
    Dim Ntfy As String
    
    Set aCl = ActiveCell
    Set ws = Sheets("53SCT-FRCOHAR")
    
    msgS = "Please verify the correct Specification, by selecting it from the Finish Options List."
    msgO = "Please choose a Specification from the Finish Options List."
    Title = "Verify Specifications"
    
    ws.Unprotect ("******")
    On Error GoTo noval
    
    Set dvG = Range("G:G").Cells.SpecialCells(xlCellTypeAllValidation)
    Cv = aCl.Value
    
        If Intersect(dvG, aCl.Offset(0, 4)) Is Nothing Then GoTo noval
            If Cv = "STD" And aCl.Row = 53 Then
                Ntfy = MsgBox(msgS, vbExclamation + vbOKOnly, Title)
                aCl.Offset(0, 4).Value = "PAINT, WHT"
            ElseIf Cv = "STD" And aCl.Row <> 53 Then
                Ntfy = MsgBox(msgS, vbExclamation + vbOKOnly, Title)
                aCl.Offset(0, 4).Value = "UC"
            Else
                Ntfy = MsgBox(msgO, vbExclamation + vbOKOnly, Title)
            End If
            
        ws.Protect ("******")
        Exit Sub
noval:
        ws.Protect ("******")
        MsgBox (Null)
    
    On Error GoTo 0
    
End Sub

…它成功地更改了G列的值,但立即返回调用过程并继续循环,直到到达文档末尾

注意,调用过程确实设置了一个参数:

Private Sub Worksheet_Change(ByVal Target As Range)
这跟这事有关系吗?或者我的其他电话怎么会在里面?或者,也许使用“ActiveCell”某种程度上导致了循环的发生

基本上,我只希望sub在用户浏览文档时每行运行一次

提前感谢您的帮助

aCl.Offset(0, 4).Value = "UC"
Private Sub Worksheet_Change(ByVal Target As Range)