根据excel中的下拉列表自动填充单元格

Posted

技术标签:

【中文标题】根据excel中的下拉列表自动填充单元格【英文标题】:Autofill cells based on drop down list in excel 【发布时间】:2020-03-12 09:54:27 【问题描述】:

我正在尝试创建一个 VBA,它根据表单中的下拉列表为我提供自动值。问题是,当我运行宏时,它会导致错误并且 excel 停止工作。非常欢迎在这种情况下提供任何帮助。

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("$G$11") = "UD Sheet" Then
        Rows("20:25").EntireRow.Hidden = False
    Else
        Rows("21:25").EntireRow.Hidden = True
    End If

If Range("G12").Value = "Flex Tape" Then
        Range("B20").Value = "None"
    Else
        Range("B20").Value = ""
    End If
exitHandler:
  Application.EnableEvents = True
  Exit Sub

End Sub

【问题讨论】:

能否请您发布整个例程,您用于此例程的事件是什么? Target 是一个范围对象,所以我认为您是通过事件调用它。 是的,基本上在“单元格 G12”中有一个数据验证,当单击它时会填充单元格“B20:R20”中的值,但目前我正在尝试将它与自动填充公式一起使用,这也不起作用 【参考方案1】:

首先,在您的代码中,无需在 End Sub 之前放置 Exit Sub。 代码将在该行之后结束,因此这是一个冗余。

接下来您需要了解的是,如果您不明确禁用更改事件,它将继续触发。因此,这意味着当您在该工作表上隐藏一行时,更改事件将继续发生,因为工作表上将会发生更改。即(隐藏行)。

为此,您需要使用 Application.EnableEvents = False 禁用应用程序的事件监听器。所以应用程序可以根据第一个事件做一件事情。

您需要记住的下一件事是跟踪更改发生的位置并启动您的程序。 Target 是一个范围对象,它将返回工作表上发生特定更改的范围。

为此,您需要验证是否需要使用 Intersect 函数基于目标触发例程。

整个代码如下:

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

     If Not Intersect(Target, Range("G11")) Is Nothing Then
         If Range("$G$11") = "UD Sheet" Then    
             Rows("20:25").EntireRow.Hidden = False
         Else
             Rows("21:25").EntireRow.Hidden = True
         End If
     End If

     If Not Intersect(Target, Range("G12")) Is Nothing Then
         If Range("G12").Value = "Flex Tape" Then
             Range("B20").Value = "None"
         Else
             Range("B20").Value = ""
         End If
     End If
     Application.EnableEvents = True
     End Sub

【讨论】:

```` If Range("G12").Value = "Flex Tape" Then Range("'Product names'!B9:G9").AutoFill Destination:=Range("B20: R20"), Type:=xlFillCopy Else Range("B20:R20").ClearContents End If ```` 在这种情况下,我尝试使用自动填充公式来执行此操作,因为当我选择下拉菜单时需要填写 1 个以上的单元格,但 XL 表中没有变化 啊,明白了。我尝试了你的方法并且它正在工作,但在这种情况下,这个想法是填充多个单元格。例如,B20=X、E20=XX、H20=X 等等。所以我的问题是简单地在公式中添加多个范围会起作用还是我每次都需要触发例程? 我明白了,尝试使用 Copy 方法而不是 Autofill 方法 Range("B9:G9").Copy Destination:=Range("B20:R20") 参考***.com/questions/1528800/…解释。

以上是关于根据excel中的下拉列表自动填充单元格的主要内容,如果未能解决你的问题,请参考以下文章

使用In-cell下拉列表中的值自动填充单元格 - VBA

下拉/自动填充日期列表,但只有工作日,而不是周末 - excel

从相邻下拉列表的单元格中输入数据时,如何删除填充颜色?

Excel中设置下拉菜单并填充不同颜色

使用angularjs在html中的表格数据单元格上显示下拉列表

如何在EXCEL单元格中制作可以选择的下拉日历并自动填充