2010-12-21 73 views
3

我有一个从外部源进入VBA代码的数据数组。我希望能够将这些数据用作本工作簿中某个工作表中单元格的下拉框中的验证。但是,我不想将这些数据复制到工作表中,然后使用命名范围 - 可能会有相当多的数据,而且效率不高!以编程方式创建Excel VBA验证列表

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

回答

4
  1. 将数据放在一些文本文件中,用逗号分隔,例如(a,b,c)。

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

  3. 使用一些这样的事

    随着范围( “A1”)验证
    。新增类型:= xlValidateList,AlertStyle:= xlValidAlertStop,运营商:= _
    xlBetween,一级方程式:= ValidationList
    .IgnoreBlank =真
    .InCellDropdown =真
    .InputTitle = “”
    .ErrorTitle = “”
    .InputMessage = “”
    .ErrorMessage = “”
    .ShowInput =真
    .ShowError =真
    尾随着

+0

这里用你想验证的单元替换“A1”。 – Thunder 2010-12-21 09:58:56

+0

感谢迅雷为您提供快速准确的答案。唯一的问题是不得不将数组改成逗号分隔的字符串,这使得它更罗嗦一些。然而它做我需要的 - 谢谢! – 2010-12-21 10:22:05

+1

在使用Range(“A1”)之后添加line .Delete可能也会很有用。验证可以删除该单元格中的任何以前的验证,而不会导致错误。 – 2010-12-21 10:27:53

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 

可能看起来有点粗糙,但我认为它没有任何问题:)