根据Excel中的下拉菜单自动填充单元格的宏

时间:2020-03-10 16:17:50

标签: excel vba autofill

我需要一些帮助,以根据单元格中的下拉菜单生成基本上给出值“ 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

但是,我还有另一个宏,该宏清除了上面的代码导致错误的单元格中的所有内容。非常感谢您的帮助。

2 个答案:

答案 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