使用数组excel vba下拉列表

我试图使用单元格来select不同的数据(从数据validation和select列表)。 列表中的数据来自过滤掉的数据库。

我试图从数据库中获取数据并将其放入数组,然后使用该数组来填充列表。

不知道为什么这不起作用,所以任何帮助表示赞赏。

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 

我不相信你可以设置一个数组作为数据validation的列表。 我想它想要一个逗号分隔的string。 你可以使用Join函数把你的数组合成一个逗号分隔的string

 Join(array1, ",") 

另外它看起来不像你的循环正确地设置数组,因为“j”从来没有定义或调整,所以它可能只是反复设置数组的0元素。 连接将包含空的数组元素,所以我们希望数组的大小正好符合我们的需要。 你可以定义数组而不需要像下面这样的大小:

 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