[英]Drop down list using arrays excel vba
我正在嘗試使用單元格來選擇不同的數據(來自數據驗證和選擇列表)。 列表中的數據是從一個數據庫中過濾出來的。
我試圖從數據庫中獲取數據並將其放入一個數組中,然后使用該數組來填充列表。
不知道為什么這不起作用所以任何幫助表示贊賞。
Sub filters()
Dim find As String
Dim array1(50)
Dim i As Integer
Dim j As Integer
Dim k As String
Worksheets("Email Address").Select
find = Worksheets("Sheet1").Range("B2").Value
For i = 2 To 400
k = Worksheets("Email Address").Cells(i, 1)
If k = find Then
array1(j) = Worksheets("Email Address").Cells(i, 2)
Else
End If
Next i
Worksheets("Sheet1").Select
Range("G10").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:= _
array1
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Range("G10").Select
End Sub
我不相信您可以將數組設置為數據驗證列表。 我認為它需要一個逗號分隔的字符串。 您可以使用 Join 函數將您的數組組合成一個逗號分隔的字符串,如
Join(array1, ",")
此外,您的循環似乎沒有正確設置數組,因為“j”從未定義或調整過,因此它可能只是一遍又一遍地設置數組的 0 元素。 Join 將包含空數組元素,因此我們希望數組的大小也恰好符合我們的需要。 您可以定義沒有大小的數組,例如:
Dim array1() as String
然后在循環中根據需要調整數組大小:
j = 0
For i = 2 To 400
k = Worksheets("Email Address").Cells(i, 1)
If k = find Then
ReDim Preserve array1(j)
array1(j) = Worksheets("Email Address").Cells(i, 2)
j = j + 1
End If
Next i
如已接受的答案中所述,Validation.Formula1 屬性不直接接受數組,而 join 函數是解決方案
但是,在生成的逗號分隔字符串中的字符數超過 255 個字符的情況下, Join(array1, ",")
不起作用,在這種情況下會發出“應用程序定義或對象定義錯誤” 。
事實上,數據驗證下拉列表的限制如下:
使用數組填充下拉列表的更好解決方案是復制工作表列中的數組並將此復制的范圍轉換為命名范圍並在Formula1
屬性中使用它。
Dim rangeToCopyTo As Range
Set rangeToCopyTo = ThisWorkbook.Sheets("Sheet1").Range("A1:A" & UBound(array1))
rangeToCopyTo = Application.Transpose(array1)
Names.Add "List1", rangeToCopyTo
Worksheets("Sheet1").Select
Range("G10").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=List1"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Range("G10").Select
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.