我无法弄清楚为什么这不起作用。我有一个子程序,它从另一个Excel工作表上的数据构建验证列表。 我有类似的子程序,可以正常工作但不是这个。
如果我改变
ReDim CatsValidationList(catsArray.Count)
到
ReDim CatsValidationList(100)
或任何数字,然后它工作正常。我知道catsArray已经填充,而且还有一个catsArray.Count的数字。 那么在调整数组大小时,我错过了什么?希望有人可以提供帮助。 sub的完整代码在这里......
Sub all_cats()
'Set some variables
Dim category_list As Range
Dim catRng() As Variant
Dim catsArray As New Collection
'Empty
Range("D15:D1000").Clear
Range("F15:F1000").Clear
'Set range of data
Set category_list = Worksheets("All Cats").Range("B1", Worksheets("All Cats").Range("B10000").End(xlUp))
catRng = category_list
'Populate array with data
On Error Resume Next
For Each ct In catRng
catsArray.Add ct
Next
'Resize array
ReDim CatsValidationList(catsArray.Count)
'Populate array for validation list
For xx = 1 To UBound(CatsValidationList)
CatsValidationList(xx) = Worksheets("All Cats").Range("B" & xx).Value
Next xx
'Build validation list
With Range("D15").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlEqual, Formula1:=Join(CatsValidationList, ",")
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = False
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
使用 Public CatsValidationList()As Variant 在顶部
我已经尝试在sub中声明它,我尝试将数字分配给变量。但它并不开心。
提前致谢
它是我编写的一个较大程序的一部分,它编写了来自主数据集的小关键字列表中匹配关键字的验证列表。匹配关键字的子工作正常,我试图以相同的方式为all_cats编写子。它具有调整大小的阵列...... ReDim ValidationList1(stylecats_exact.Count) 还有一点寻找匹配的单词并将它们添加到数组
If child_cat_exact > 0 Then
stylecats_exact.Add Trim(Worksheets("All Cats").Range(catlist_index & cat_item.Row).Value) & " [" & Worksheets("All Cats").Range(catid_index & cat_item.Row).Value & "]"
Else
在all_cats子中不需要。 但是某些地方缺少某些东西,因为我无法用
填充CatsValidationListReDim CatsValidationList(catsArray.Count)
除非我输入特定数字
ReDim CatsValidationList(190)
这不好,因为完整列表经常会改变。
我感到困惑...... :(
答案 0 :(得分:1)
正如评论中所指出的,问题在于验证列表的长度而不是其他任何内容。所以我接受了使用范围的建议,而不是构建一个数组来填充列表。它现在工作正常。 (谢谢罗里) 对于那些来到这里寻找类似问题的类似解决方案的人,我修改了验证位以包含 .Add Type:= xlValidateList,AlertStyle:= xlValidAlertStop,_ 运算符:= xlBetween,Formula1:=“=”& category_list
变量category_list引用另一个名为All Cats的工作表的范围。 category_list =“'All Cats'!B2:B”& cat_end_row
我的sub的完整代码如下所示,供其他人参考,并将上述内容放入上下文中。我确信还有其他方法可以更清晰,更有效地编写它,但是现在这对我来说还可以。谢谢StackOverflow
'Set some variables
Dim category_list As String
Dim catRng() As Variant
Dim catsArray As New Collection
Dim cat_end_row As Integer
'Empty
Range("D15:D1000").Clear
Range("F15:F1000").Clear
'Find end row
cat_end_row = Worksheets("All Cats").Range("B1000000").End(xlUp).Row
'Set range of data
category_list = "'All Cats'!B2:B" & cat_end_row
'Build validation list
With Range("D15").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="=" & category_list
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = False
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With