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

Vba 从大型数组创建的Excel验证列表,vba,excel,Vba,Excel,目标 我必须创建一个下拉列表,供用户滚动浏览并选择一个项目。这些项目是公司的合同,存储在我们的目录中。有成千上万的 尝试 我的第一次尝试是使用一个sub,它遍历我们的目录,并将每个合同文件夹的名称写在列L的工作表f_参数中。然后,我使用以下代码创建验证列表: With f_param.Range("cell_titreprojet").Validation .delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertSto

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

尝试 我的第一次尝试是使用一个sub,它遍历我们的目录,并将每个合同文件夹的名称写在
L的
工作表
f_参数中。然后,我使用以下代码创建验证列表:

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
它工作得很好,但我觉得将名称存储在
数组中
,然后直接使用
数组
填充列表会更好

我用这篇文章作为参考:

我成功地从包含10项的目录中创建了验证列表,使用以下代码没有问题:

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(测试的一个,10个文件夹)更改为H(我想要的一个)时,
数组
被正确填充(我在
列中打印了1403个文件夹名
以进行检查),但在创建列表的过程中我收到了一个
错误
(使用之前发布的代码,该代码用于较小的数组)。有人知道为什么吗

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

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

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

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

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

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

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

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

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


如果没有人能回答,请随时帮助我以第一种方式回答(将名称存储在隐藏列中,并使用该列填充列表)。我只需要了解如何引用命名单元格(而不是从L3填充到Lx,我想从命名单元格填充到列表的末尾)。您从哪一行获得了什么错误消息?错误是1004(大致翻译成法语):由应用程序或对象定义的错误。我把它添加到问题中。它发生在
。Add Type:=xlValidateList,AlertStyle:=xlValidAlertStop,u运算符:=xlBetween,Formula1:=Join(liste,“,”)
起初我以为这是因为列表不能那么长,但由于我从excel工作表值(我在列L中输入的值)成功创建了它,这就不会是问题。如果没有人能回答,请随时帮助我以第一种方式完成(将名称存储在隐藏列中,并使用它填充列表)。我只需要了解如何引用命名单元格(而不是从L3填充到Lx,我想从命名单元格填充到列表的末尾)。您从哪一行获得了什么错误消息?错误是1004(大致翻译成法语):由应用程序或对象定义的错误。我把它添加到问题中。它发生在
。Add Type:=xlValidateList,AlertStyle:=xlValidAlertStop,u运算符:=xlBetween,Formula1:=Join(liste,“,”)
起初我以为这是因为列表不能那么长,但由于我从excel工作表值(我在列L中输入的值)成功创建了它,这就不会是问题。如果没有人能回答,请随时帮助我以第一种方式完成(将名称存储在隐藏列中,并使用它填充列表)。我只需要了解如何引用命名单元格(而不是从L3填充到Lx,我想从命名单元格填充到列表的末尾)。您从哪一行获得了什么错误消息?错误是1004(大致翻译成法语):由应用程序或对象定义的错误。我把它添加到问题中。它发生在
。Add Type:=xlValidateList,AlertStyle:=xlValidAlertStop,u运算符:=xlBetween,Formula1:=Join(liste,“,”)
起初我以为这是因为列表不能那么长,但由于我从excel工作表值(我在列L中输入的值)成功创建了它,这就不会是问题。如果没有人能回答,请随时帮助我以第一种方式完成(将名称存储在隐藏列中,并使用它填充列表)。我只需要了解如何引用命名的单元格(而不是我想从L3填充到Lx)