我需要一些帮助,以根据单元格中的下拉菜单生成基本上给出值“ 200000”的宏。此下拉菜单中有两个定义的值(120和480)。如果在下拉菜单中选择了其他值,那么我应该可以自由编写所需的任何值。我想出的代码如下
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("$G$11")) Is Nothing Then
Range("$B$20:$R$25,$Z$20:$AM$25").ClearContents
End If
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("$G$11")) Is Nothing Then
Range("$F$16:$Q$16,$R$15:$U$16,$V$16:$AA$16,$AB$15:$AM$16").ClearContents
End If
If Range("I16") = 120 Or Range("I16") = 480 Then
Range("F16") = 200000
Else
Range("F16") = ""
End If
exitHandler:
Application.EnableEvents = True
Exit Sub
End Sub
但是,我还有另一个宏,该宏清除了上面的代码导致错误的单元格中的所有内容。非常感谢您的帮助。
答案 0 :(得分:1)
确保您没有从内部重新触发事件处理程序。 同样值得添加一个错误处理程序,以确保不会关闭事件。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim v
On Error GoTo exitHandler
If Target.Cells.CountLarge > 1 Then Exit Sub
If Not Intersect(Target, Me.Range("G11")) Is Nothing Then
Application.EnableEvents = False
Me.Range("B20:R25,Z20:AM25,F16:Q16,R15:U16,V16:AA16,AB15:AM16").ClearContents
End If
If Not Intersect(Target, Me.Range("I16")) Is Nothing Then
v = Target.Value
Application.EnableEvents = False
Me.Range("F16").Value = IIf(v = 120 Or v = 480, 200000, "")
End If
exitHandler:
Application.EnableEvents = True
End Sub
答案 1 :(得分:0)
基本上,您只需要在清除单元格之前禁用事件,这样就不会触发multi_array = [[33], [34], [35], [34, 35], [34, 35], [36], [30, 31], [30, 31], [30, 31, 32], [32, 33]]
multi_flatten = multi_array.flatten
#=> [33, 34, 35, 34, 35, 34, 35, 36, 30, 31, 30, 31, 30, 31, 32, 32, 33]
multi_flatten.reject{|x| multi_flatten.count(x)>1}
#=> [36]
代码。
我不确定代码的第二位如何关联,因此可能需要一些调整。
Change