从大型数组创建的Excel验证列表

时间:2015-06-05 14:37:38

标签: excel vba excel-vba

目标 我必须创建一个下拉列表供用户滚动并选择一个项目。这些项目是公司的合同,存储在我们的目录中。有成千上万的人。

尝试次数 我的第一次尝试是使用遍历我们目录的sub并在column f sheet上的With f_param.Range("cell_titreprojet").Validation .delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=Paramètres!$L$3:$l$1406" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With L中写下每个合同文件夹的名称。然后我使用以下代码创建验证列表:

array

效果很好,但我觉得将名称存储在array中,然后直接使用values Sub Example2() Dim objFSO As Object Dim objFolder As Object Dim objSubFolder As Object Dim i As Integer Dim liste() As String 'Create an instance of the FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") 'Get the folder object Set objFolder = objFSO.GetFolder("O:") i = 0 'loops through each file in the directory and stores their path For Each objSubFolder In objFolder.subfolders If IsNumeric(Left(objSubFolder.Name, 1)) Then 'print folder path ReDim Preserve liste(i) i = i + 1 End If Next objSubFolder With Feuil2.Range("A1").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:=Join(liste, ",") End With End Sub 来填充列表会更好

我使用这篇文章作为参考:Excel Validation Drop Down list using VBA

我设法使用以下代码从包含10个项目的目录创建验证列表:

array

问题

当我从目录O :(测试的一个,10个文件夹)更改为H:(我想要的那个)时,column被正确填充(我在{{中打印了1403个文件夹名称) 1}}要检查),但我在列表的创建过程中收到error(使用之前发布的相同代码,使用较小的数组)。有谁知道为什么?

编辑:错误是1004(大致翻译自法语):由应用程序或对象定义的错误。

1 个答案:

答案 0 :(得分:3)

This page表示根据列表的构建方式有不同的限制。

  

数据验证下拉列表中显示的项目数量有限制:该列表最多可显示工作表中列表中的32,767项。如果在数据验证对话框(分隔列表)中键入项目,则限制为256个字符,包括分隔符。   如果您需要的项目多于此项,则可以创建依赖的下拉列表,按类别细分。