Vba 工作表\u多个特定单元格的更改

Vba 工作表\u多个特定单元格的更改,vba,excel,Vba,Excel,我将在前言中说,我花了很多时间进行搜索和测试,但没有一件事情像预期的那样有效 我基本上是在创建一个任务列表,该列表将导出为CSV以便导入。棘手的部分是任务列表由两个用户选择的变量决定 第一个(“C2”)确定导入是否包括“Beta任务”。这是一个简单的是/否,并使用一个简单的公式填充“Include”列 第二个(“D2”)根据列表大小确定包含哪些任务 这目前效果很好。这就是我遇到麻烦的地方。首先,wokbook_更改正在监视工作表上的所有更改,因此我无法手动选择包含/排除任务。我怎样才能让工作表只

我将在前言中说,我花了很多时间进行搜索和测试,但没有一件事情像预期的那样有效

我基本上是在创建一个任务列表,该列表将导出为CSV以便导入。棘手的部分是任务列表由两个用户选择的变量决定

第一个(“C2”)确定导入是否包括“Beta任务”。这是一个简单的是/否,并使用一个简单的公式填充“Include”列

第二个(“D2”)根据列表大小确定包含哪些任务

这目前效果很好。这就是我遇到麻烦的地方。首先,wokbook_更改正在监视工作表上的所有更改,因此我无法手动选择包含/排除任务。我怎样才能让工作表只监视那个单元格的变化

此外,理想情况下,如果我手动更改为“排除”,我希望beta版本遵循主要任务。例如,将“C2”设置为是,将“D2”设置为中等。如果我选择手动排除“任务4”,则相应的测试版也应排除。我将此代码作为一个简单的If语句放在工作簿中,但无法将其用于工作簿的更改

Private Sub Worksheet_Change(ByVal Target As Range)
Static IsActive As Boolean
If IsActive Then Exit Sub
IsActive = True

If Range("D2").Value = "Small" Then
    Range("A7").Value = "Yes"
    Range("A8").Value = "No"
    Range("A9").Value = "No"
    Range("A10").Value = ""
    Range("A11").Value = ""
    Range("A12").Value = ""
    Range("A15").Value = "Yes"
    Range("A17").Value = "No"
    Range("A19").Value = "No"
    Range("A21").Value = "No"

ElseIf Range("D2").Value = "Medium" Then
    Range("A7").Value = "Yes"
    Range("A8").Value = "Yes"
    Range("A9").Value = "No"
    Range("A15").Value = "Yes"
    Range("A17").Value = "Yes"
    Range("A19").Value = "No"
    Range("A21").Value = "No"

ElseIf Range("D2").Value = "Large" Then
    Range("A7").Value = "Yes"
    Range("A8").Value = "Yes"
    Range("A9").Value = "Yes"
    Range("A15").Value = "Yes"
    Range("A17").Value = "Yes"
    Range("A19").Value = "Yes"
    Range("A21").Value = "No"


ElseIf Range("D2").Value = "X-Large" Then
    Range("A7").Value = "Yes"
    Range("A8").Value = "Yes"
    Range("A9").Value = "Yes"
    Range("A15").Value = "Yes"
    Range("A17").Value = "Yes"
    Range("A19").Value = "Yes"
    Range("A21").Value = "Yes"

ElseIf Range("D2").Value = "<Select>" Then
    Range("A7").Value = "Yes"
    Range("A8").Value = "Yes"
    Range("A9").Value = "Yes"
    Range("A15").Value = "Yes"
    Range("A17").Value = "Yes"
    Range("A19").Value = "Yes"
    Range("A21").Value = "Yes"

End If

If Range("A15").Value = "No" Then
    Range("A16").Value = "No"
End If

If Range("A17").Value = "No" Then
    Range("A18").Value = "No"
End If

If Range("A19").Value = "No" Then
    Range("A20").Value = "No"
End If

If Range("A21").Value = "No" Then
    Range("A22").Value = "No"
End If

IsActive = False

End Sub
Private子工作表\u更改(ByVal目标作为范围)
静态IsActive为布尔型
如果是活动的,则退出子系统
IsActive=True
如果范围(“D2”).Value=“小”,则
范围(“A7”)。值=“是”
范围(“A8”)。值=“否”
范围(“A9”)。值=“否”
范围(“A10”).Value=“”
范围(“A11”).Value=“”
范围(“A12”).Value=“”
范围(“A15”)。值=“是”
范围(“A17”)。值=“否”
范围(“A19”)。值=“否”
范围(“A21”)。值=“否”
ElseIf范围(“D2”).Value=“中等”则
范围(“A7”)。值=“是”
范围(“A8”)。值=“是”
范围(“A9”)。值=“否”
范围(“A15”)。值=“是”
范围(“A17”)。值=“是”
范围(“A19”)。值=“否”
范围(“A21”)。值=“否”
ElseIf范围(“D2”).Value=“大”则
范围(“A7”)。值=“是”
范围(“A8”)。值=“是”
范围(“A9”)。值=“是”
范围(“A15”)。值=“是”
范围(“A17”)。值=“是”
范围(“A19”)。值=“是”
范围(“A21”)。值=“否”
ElseIf范围(“D2”).Value=“X-Large”然后
范围(“A7”)。值=“是”
范围(“A8”)。值=“是”
范围(“A9”)。值=“是”
范围(“A15”)。值=“是”
范围(“A17”)。值=“是”
范围(“A19”)。值=“是”
范围(“A21”)。值=“是”
ElseIf范围(“D2”)。值=“然后
范围(“A7”)。值=“是”
范围(“A8”)。值=“是”
范围(“A9”)。值=“是”
范围(“A15”)。值=“是”
范围(“A17”)。值=“是”
范围(“A19”)。值=“是”
范围(“A21”)。值=“是”
如果结束
如果范围(“A15”).Value=“否”,则
范围(“A16”)。值=“否”
如果结束
如果范围(“A17”).Value=“否”,则
范围(“A18”)。值=“否”
如果结束
如果范围(“A19”).Value=“否”,则
范围(“A20”)。值=“否”
如果结束
如果范围(“A21”).Value=“否”,则
范围(“A22”)。值=“否”
如果结束
IsActive=False
端接头
提前感谢您的帮助。此外,我毫不怀疑我不会以最有效的方式进行这项工作,因此我们也将非常感谢在这方面提出的任何建议。

而不是这些东西

Static IsActive As Boolean
If IsActive Then Exit Sub
IsActive = True
您只需使用
Application.EnableEvents=False
即可防止此事件重新触发自身

您可以使用测试更改的单元格是否在特定范围内

另外,我建议使用
Select Case
而不是多个
ElseIf
,最后您可以缩短您的范围,如下图所示:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False

    If Not Intersect(Target, Range("D2,D5")) Is Nothing Then
        'this will only run if cells D2 or D5 was changed

        Select Case Range("D2").Value
            Case "Small":
                Range("A7,A15").Value = "Yes"
                Range("A8,A9,A17,A19,A21").Value = "No"
                Range("A10,A11,A12").Value = ""

            Case "Medium":
                'todo 
            Case "Large":
                'todo
            Case "X-Large":
                'todo
            Case "<Select>":
                'todo
            Case Else:
                'what happens if no case it true
        End Select

    End If

    Application.EnableEvents = True
End Sub
选项显式
私有子工作表_更改(ByVal目标作为范围)
Application.EnableEvents=False
如果不相交(目标,范围(“D2,D5”))则为零
'仅当单元格D2或D5发生更改时,此操作才会运行
选择案例范围(“D2”)。值
案例“小”:
范围(“A7,A15”)。值=“是”
范围(“A8、A9、A17、A19、A21”)。值=“否”
范围(“A10、A11、A12”)。值=“”
案例“中等”:
“待办事项
案例“大”:
“待办事项
案例“X-大型”:
“待办事项
案例“”:
“待办事项
其他情况:
“如果不是真的会怎么样
结束选择
如果结束
Application.EnableEvents=True
端接头