If-Then 语句在 Sub 和 Calling Procedure

问题描述

伙计们,我需要一些帮助...

我有一个子过程,用于检测工作表 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,4).Value = "UC"
            Else
                Ntfy = MsgBox(msgO,Title)
            End If
            
        ws.Protect ("******")
        Exit Sub
noval:
        ws.Protect ("******")
        MsgBox (Null)
    
    On Error GoTo 0
    
End Sub

当它到达这一行时:

aCl.Offset(0,WHT"

aCl.Offset(0,4).Value = "UC"

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

注意,调用过程确实有一个参数集:

Private Sub Worksheet_Change(ByVal Target As Range)

这跟这有关系吗?或者我如何在其中堆叠我的其他电话?或者,也许,以某种方式使用“ActiveCell”会导致循环发生?

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

提前感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)