【问题标题】:Data Validation drop down list not auto-updating数据验证下拉列表不自动更新
【发布时间】:2017-07-27 17:46:42
【问题描述】:

我在 WorkSheet (PartsList) 上有一个简单的数据列,它从其各自的行中过滤数据。在同一工作簿中的另一个工作表 (BoM) 上,我通过数据验证“列表”引用此列。

我遇到的问题是,当“PartsList”工作表中的数据更新时,下拉列表中显示的信息保持不变。

如下图所示,尽管“零件编号”和“变体”列已更新,但下拉列表并未更新“零件编号”。

这是生成列表的公式: 有没有办法让下拉列表自动更新?

【问题讨论】:

  • 数据验证列表是如何定义的?没有看到这里很难提供帮助。
  • 您是否编辑了数据验证的源范围?
  • 我添加了数据验证设置的图像和生成列表的公式。
  • 我怀疑您认为下拉列表中的值会自动更改。即使列表中的值是动态的,这也不会发生。要更改下拉列表的值,您必须手动进入并选择一个新值。让它“自动”更新的唯一方法是通过 VBA 代码操作。
  • @DanM - 看起来是时候开始研究 VBA 教程了。

标签: excel vba validation


【解决方案1】:

在后台编写一个 vba 代码,该代码将在工作簿打开时更新列表。 第 1 步:编写一个 vba 代码,根据零件列表中的行数将数据验证过滤器添加到列中。 第 2 步:每当打开工作簿时,使用 workbook_open fn 运行宏

【讨论】:

    【解决方案2】:

    我设法解决了这个问题。

    我在网上找到了一些 VBA 代码,并在必要时进行了修改。请参阅下面的代码,其中包括

     Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    ' Ensure all lists are made from tables and that these tables are named
    ' in the Name Manager.
    ' When creating your Data Validation List, instead of selecting a range
    ' in 'Source', click within 'Source' and press 'F3'. Finally select your
    ' tables name.
    Dim strValidationList As String
    Dim strVal As String
    Dim lngNum As Long
    
    On Error GoTo Nevermind
    strValidationList = Mid(Target.Validation.Formula1, 2)
    strVal = Target.Value
    lngNum = Application.WorksheetFunction.Match(strVal, ThisWorkbook.Names(strValidationList).RefersToRange, 0)
    
    ' Converts table contents into a formula
    If strVal <> "" And lngNum > 0 Then
        Application.EnableEvents = False
        Target.Formula = "=INDEX(" & strValidationList & ", " & lngNum & ")"
    End If
    
    Nevermind:
        Application.EnableEvents = True
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      相关资源
      最近更新 更多