目标 我必须创建一个下拉列表供用户滚动并选择一个项目。这些项目是公司的合同,存储在我们的目录中。有成千上万的人。
尝试次数
我的第一次尝试是使用遍历我们目录的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(大致翻译自法语):由应用程序或对象定义的错误。
答案 0 :(得分:3)
This page表示根据列表的构建方式有不同的限制。
数据验证下拉列表中显示的项目数量有限制:该列表最多可显示工作表中列表中的32,767项。如果在数据验证对话框(分隔列表)中键入项目,则限制为256个字符,包括分隔符。 如果您需要的项目多于此项,则可以创建依赖的下拉列表,按类别细分。