vba - 在 VBA 中创建验证列表

标签 vba excel

我无法弄清楚为什么这不起作用。我有一个从另一个 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/

相关文章:

vba - 打印每行副本之前的最后一行和单元格区域的发送值

用于根据特定单元格标准将单元格从一列移动到另一列的 VBA 代码

excel - 在时间表内同时刷新外部数据源和数据透视表

html - 将值分配给 html 表时使用单元格保持换行符

excel - 从 Access 2013 运行 Excel 2013 宏时出现 VBA 自动化错误(系统调用失败)

c# - 从 .NET 中的 VBA 函数访问返回值?

.net - Excel VBA 网页抓取 - 自动化错误/未指定错误

python - 如何使用 openpyxls 将数据表添加到图表空间?

c# - NPOI Excel 数字格式未显示在 asp.net 的 Excel 工作表中

java - Excel数据变化,Java没有注意到