【问题标题】:Validation Select from Drop Down List验证从下拉列表中选择
【发布时间】:2022-07-06 15:24:37
【问题描述】:

我在工作表m_listA2 中有一系列下拉列表,如下所示

"abc"
"def"
"ghi"

我使用下面的代码在Sheet1 创建了下拉列表。单击按钮时执行这些代码行。

Dim lastRowNo
lastRowNo = ws.Cells(Rows.Count, 2).End(xlUp).Row
Dim id As String
id = "def"
    
With Worksheets("Sheet1").Range("A1").Validation
    .Delete
    .Add Type:=xlValidateList, _
       Operator:=xlEqual, _
       Formula1:="=m_list!" & Range("A2", "A" & lastRowNo).Address
End With
Range("A1").Value = id

在最后一行,我尝试将下拉列表设置为自动选择"def",但下拉列表没有选择它。
"def" 在手动单击时可用。

【问题讨论】:

  • 您正在设置 V12?
  • 抱歉,打错字了。应该是A1
  • 不要使用单元格的隐式引用 - 而是使用显式:例如worksheets("Sheet1").range("A1").value = id
  • @Ike 谢谢!这样可行。我会记得在处理许多工作表时继续使用显式引用

标签: excel vba validation


【解决方案1】:

数据验证列表

Option Explicit

Sub ApplyDataValidation()
    
    Const ValInit As String = "def"
    
    Dim ValFormula As String
    
    With ThisWorkbook.Worksheets("m_list")
        Dim lRow As Long: lRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        ValFormula = "='" & .Name & "'!" & .Range("A2", "A" & lRow).Address
    End With
    
    With ThisWorkbook.Worksheets("Sheet1").Range("A1")
        With .Validation
            .Delete
            .Add xlValidateList, , xlEqual, ValFormula
        End With
        .Value = ValInit
    End With
    
End Sub

【讨论】:

  • 感谢您的回答!您的解决方案也有效。我以后可能会追随你的。目前,上述评论的答案适合我。
  • 我建议您重新考虑。看起来代码是在几分钟内编写的,但我向你保证,我是花时间写的。每条线路都在其理想的位置。所以至少研究一下微小的差异,例如ThisWorkbookValFormula,各个时期(点)...顺便说一句,我并不是要破坏 cmets 中的答案,它涵盖了主要错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 2013-06-07
  • 2013-09-18
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多