我将开始说,我花了很多时间进行搜索和测试,但没有任何事情能按预期工作。
我实际上是在创建一个任务列表,该任务列表将导出为CSV以便导入。棘手的部分是任务列表由两个用户选择的变量确定。
第一个(“ C2”)确定导入是否包括“ Beta任务”。这是一个简单的是/否,并使用一个简单的公式填充“包含”列。
第二个(“ D2”)根据列表大小确定要包括的任务。
目前可以正常使用。这是我遇到麻烦的地方。首先是wokbook_change正在监视工作表上的所有更改,因此我无法手动选择包含/排除任务。我如何才能让工作表仅观察该单元格的变化?
此外,理想情况下,如果我手动更改为排除,我希望beta版本遵循主要任务。例如,将“ C2”设置为“是”,将“ D2”设置为“中”。如果我选择手动排除“任务4”,则相应的Beta也应排除在外。我在工作簿中将此代码作为简单的If语句,但无法使其与workbook_change一起使用。
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
提前感谢您的帮助。另外,我毫不怀疑我不会以最有效的方式进行此操作,因此,对此方面的任何建议也将不胜感激。
答案 0 :(得分:0)
代替这些东西
Static IsActive As Boolean
If IsActive Then Exit Sub
IsActive = True
您可以只使用Application.EnableEvents = False
来阻止此事件重新触发。
您可以使用Application.Intersect Method测试已更改的单元格是否在特定范围内。
我也建议使用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