以编程方式创建Excel VBA验证列表

问题描述 投票:3回答:3

我有一个数据数组,这些数据将从外部源输入到VBA代码中。我希望能够在该工作簿的一张纸上的一个单元格的下拉框中分配该数据以用作验证。但是,我不想将这些数据复制到工作表中,然后使用一个命名范围-可能有很多数据,而且感觉效率不高!

我确定必须有一种方法-但我还没有找到一种方法。有什么想法吗?

validation excel-vba vba excel
3个回答
4
投票
  1. 将数据放在一些文本文件中,并用逗号分隔,例如(a,b,c)。

  2. 使用VBA将数据读入字符串变量,例如ValidationList。

  3. 使用类似的东西

    With Range(“ A1”)。Validation 。添加类型:= xlValidateList,AlertStyle:= xlValidAlertStop,运算符:= _ xlBetween,Formula1:= ValidationList .IgnoreBlank =真 .InCellDropdown =真 .InputTitle =“” .ErrorTitle =“” .InputMessage =“” .ErrorMessage =“” .ShowInput = True .ShowError = True结尾为


0
投票

这是我使用的一个小技巧,在此“列表”中是一个ArrayList:

Dim ValidateList As String
For Each x In list
ValidateList = ValidateList + x + Chr(44)
Next
 With Sheets(yoursheet).Range(yourCell).Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
     xlBetween, Formula1:=ValidateList
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

可能看起来有点粗糙,但我认为它可以正常工作:)


0
投票

我编写了一些代码,该代码通过vba以编程方式插入了数据验证,并且忽略了空格,因此列表将更易于滚动。已测试。

Sub ValidateNonBlanks()
Dim lastRowCombo As Long
Dim lastRowSource As Long
Dim rangeSource As Range
Dim rangeCombo  As Range

lastRowCombo = 150
lastRowSource = Sheets("Phones_Emails").Cells(Rows.Count, "A").End(xlUp).row

Set rangeCombo = Sheets("Whatsup_msg").Range("J4:J" & lastRowCombo)
Set rangeSource = Sheets("Phones_Emails").Range("A4:A" & lastRowSource)

With rangeCombo.Validation
    .Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Phones_Emails!$A$2:$A$" & lastRowSource
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.