我无法弄清楚为什么这不起作用。我有一个从另一个 Excel 工作表上的数据构建验证列表的子例程。
我有类似的子程序可以正常工作,但不是这个。
如果我改变
ReDim CatsValidationList(catsArray.Count)
至
ReDim CatsValidationList(100)
或任何数字,然后它工作正常。我知道catsArray 已填充,并且还有一个catsArray.Count 的数字。
那么在调整数组大小时我错过了什么?希望有人可以提供帮助。
子的完整代码在这里...
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() 作为变体
在顶部
我尝试在子中声明它,我尝试将数字分配给变量。但它并不快乐。
提前致谢
它是我编写的一个较大程序的一部分,该程序在主数据集中的一个小关键字列表中编译匹配关键字的验证列表。匹配关键字的 sub 工作正常,我正在尝试以相同的方式为 all_cats 编写 sub。它具有调整大小的数组...
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 sub 中不需要。
但是某处缺少一些东西,因为我无法使用 CatsValidationList 填充
ReDim CatsValidationList(catsArray.Count)
除非我输入一个特定的数字
ReDim CatsValidationList(190)
这不好,因为完整的列表经常会改变。
我很困惑... :(
最佳答案
正如评论中所指出的,问题在于验证列表的长度,而不是其他任何问题。所以我接受了使用范围而不是建立一个数组来填充列表的建议。它现在工作正常。 (谢谢罗里)
对于那些来这里寻找类似问题的类似解决方案的人,我修改了验证位以包括
.Add 类型:=xlValidateList,AlertStyle:=xlValidAlertStop,_
运算符:=xlBetween,Formula1:=“=” & category_list
变量 category_list 引用另一个名为 All Cats 的工作表中的范围。
category_list = "'所有猫'!B2:B"& cat_end_row
下面是我的子代码的完整代码,供其他人引用,并将上述内容置于上下文中。我确信还有其他更清洁、更高效的编写方式,但现在这对我来说还可以。感谢 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
关于vba - 在 VBA 中创建验证列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34612889/