Цель Мне нужно создать раскрывающийся список для прокрутки и выбора элемента. Элементами являются контракты компании, хранящиеся в наших каталогах. Их тысячи.Excel Список валидации, созданный из большого массива
Попытки Моя первая попытка была использовать подводную лодку, которая идет через наш каталог и записывает имя папки для каждого контракта в column
L на 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
«s 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
заполнен правильно (я напечатал имя папки 1403 s в column
, чтобы проверить), но я получил error
во время создания списка (используя тот же код, который был опубликован ранее, который работал с меньшим массивом). У кого-нибудь есть идея, почему?
EDIT: ошибка 1004 (от французского): ошибка, определяемая приложением или объектом.
Если никто не может ответить, не стесняйтесь помочь мне сделать это первым способом (сохраняя имена в скрытом столбце и используя это для заполнения списка). Мне просто нужно понять, как обращаться к именованным ячейкам (вместо заполнения из L3 в L X я хотел бы заполнить из именованной ячейки до конца списка.) –
Какое сообщение об ошибке вы получаете и с какой строки? – 314UnreadEmails
Ошибка 1004 (от французского): ошибка, определяемая приложением или объектом. Я добавил его к вопросу. это происходит в '.Add Type: = xlValidateList, AlertStyle: = xlValidAlertStop, _ Operator: = xlBetween, Formula1: = Join (liste,", ")' –