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