【发布时间】:2015-06-05 14:37:38
【问题描述】:
目标 我必须为用户创建一个下拉列表以滚动并选择一个项目。这些项目是公司的合同,存储在我们的目录中。有成千上万。
尝试
我的第一次尝试是使用一个子目录,它遍历我们的目录并将每个合约文件夹的名称写入column L on sheet f_param。然后我使用以下代码创建验证列表:
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 填充列表会更好。
我用这篇文章作为参考:Excel Validation Drop Down list using VBA
我成功地使用以下代码从包含 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:(这是我想要的那个)时,array 被正确填充(我在column 中打印了 1403 个文件夹名称到检查),但我在创建列表期间收到了error(使用之前发布的相同代码,该代码适用于较小的数组)。有谁知道为什么?
编辑:错误是 1004(大致翻译自法语):由应用程序或对象定义的错误。
【问题讨论】:
-
如果没人能回答,请随时帮我做第一种方式(将名称存储在隐藏列中并使用它来填充列表)。我只需要了解如何引用命名单元格(而不是从 L3 填充到 L X 我想从命名单元格填充到列表末尾。)
-
您收到什么错误消息以及来自哪一行?
-
错误为 1004(大致翻译自法语):由应用程序或对象定义的错误。我将它添加到问题中。它发生在
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:=Join(liste, ",") -
起初我以为是因为一个列表不能那么长,但由于我成功创建它时它来自 excel 工作表值(我放在 L 列中的那些),那不会是问题。