从大数组创build的Excelvalidation列表

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

尝试我的第一次尝试是使用一个通过我们的目录,并写入每个合约的文件夹名称L column f_param sheet子。 然后我使用下面的代码来创buildvalidation列表:

 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 

它工作得很好,但我感觉像存储在一个array的名称,然后直接使用arrayvalues来填充列表会更好。

我用这篇文章作为参考: 使用VBA的Excelvalidation下拉列表

我设法从一个包含10个项目的目录创buildvalidation列表,没有问题,使用这个代码:

 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 

问题

当我从目录O :(testing的一个,10个文件夹)更改为H :(这是我想要的), array填写正确(我在column打印1403文件夹名称检查),但我收到在创build列表时error (使用之前发布的相同代码,使用较小的数组)。 有没有人有一个想法,为什么?

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

这个页面表示根据列表的构build方式,有不同的限制。

数据validation下拉列表中显示的项目数量是有限制的:列表最多可以显示来自工作表上列表的32,767个项目。 如果您将项目键入到数据validation对话框(分隔列表)中,则限制为256个字符,包括分隔符。 如果您需要比这更多的项目,您可以创build一个从属的下拉列表,按类别细分。