从大数组创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
的名称,然后直接使用array
的values
来填充列表会更好。
我用这篇文章作为参考: 使用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一个从属的下拉列表,按类别细分。