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

Macro that autofills the cell based on drop down menu in excel

我需要帮助来生成基本上根据单元格中的下拉菜单给出值“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")) Is Nothing Then
 Range("$B:$R,$Z:$AM").ClearContents
 End If

If Target.Cells.Count > 1 Then Exit Sub
 If Not Intersect(Target, Range("$G")) Is Nothing Then
 Range("$F:$Q,$R:$U,$V:$AA,$AB:$AM").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

但是,我有另一个宏可以清除上述代码导致错误的单元格中的所有内容。非常感谢任何帮助。

基本上您只需要在清除单元格之前禁用事件,这样就不会触发 Change 代码。

我不确定第二段代码是如何关联的,因此可能需要进行一些调整。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("$G")) Is Nothing Then
        Application.EnableEvents = False
        Range("$B:$R,$Z:$AM").ClearContents
        Range("$F:$Q,$R:$U,$V:$AA,$AB:$AM").ClearContents
        If Range("I16") = 120 Or Range("I16") = 480 Then 'presumably belongs elswhere as just cleared I16 above?
            Range("F16") = 200000
        Else
            Range("F16").Clear
        End If
    End If
    Application.EnableEvents = True
exitHandler:
Application.EnableEvents = True
Exit Sub

End Sub

确保您没有从内部重新触发您的事件处理程序。 还值得添加一个错误处理程序以确保事件不会被关闭。

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