假设在 Microsoft Excel 中有一个名为 的矩阵常量,Values
定义为={"One","Two","Three"}
,我如何在列表框、组合框等控制元素中使用该常量INDIRECT()
?
我很清楚这些用例需要一个范围而不是矩阵常数,但是有没有办法通过函数等内置方法将一个转换为另一个?我可以在 VBA 中构建或转换范围,但我希望有通用的方法来实现这一点。
我已经考虑过从具有相同维度的内置函数创建一个范围,并使用封装的函数调用分配矩阵常数中的值,但我不确定这是否可以实现。
期待听到任何建议!
PS:我不是在寻找 VBA 解决方案,我想通过内置方法实现这一点。请不要问我使用范围以及为什么要使用矩阵常数 - 它就是这样。;)
答案1
根据这篇文章的回答https://stackoverflow.com/questions/31223709/fill-a-listbox-with-an-array-in-vba
您可以使用Evaluate
函数将 Excel 矩阵常量转换为 vba 数组,然后使用它来填充列表框,例如
Sub Listbox_Things()
'My Listbox is called "Listbox1" and it is located on "Sheet1"
'With the Listbox visible, F8 through this code
With Sheet1.ListBox1
.List = Split("1,2,3", ",")
.Clear
.List = Array("One", "Two", "Three")
.Clear
.List = [Values] ' here 'Values' is defined in Excel
.Clear
.List = Array(1, 2, 3)
.Clear
Dim x() As Variant
x = Array("One", "Two", "Three")
.List = x
.Clear
.List = Application.GetCustomListContents(2)
End With
End Sub
您不能使用INDIRECT
函数,因为它仅适用于范围。您可以改用EVALUATE
。