![](/img/trans.png)
[英]Populating an array of ranges using the ADDRESS function in Excel VBA
[英]Using an Array of Ranges in VBA - Excel
VBA是否支持使用范围变量数组?
dim rangeArray() as range
dim count as integer
dim i as integer
count = 3
redim rangeArray(1 to count)
for i = 1 to count
msgbox rangeArray(i).cells(1,1).value
next
我不能让它在这种类型的应用程序中工作。 我想以一定的顺序存储一系列范围作为“主副本”。 然后我可以添加,删除,排序或对此数组执行任何操作,然后将其打印到excel中的一系列范围。 看起来excel似乎不支持这一点 - 它只是强迫您将数据存储在电子表格中,并且您必须重新读取它才能使用它。
不,数组不能保存对象。
但o
对象可以容纳对象。 我认为你可能想要的是一个Range对象,它由各种特定的其他Range对象组成。 在这个例子中,rMaster是我的“数组”,它包含三个单元格。
Sub StoreRanges()
Dim rMaster As Range
Dim rCell As Range
Set rMaster = Sheet1.Range("A1")
Set rMaster = Union(rMaster, Sheet1.Range("A10"))
Set rMaster = Union(rMaster, Sheet1.Range("A20"))
For Each rCell In rMaster
MsgBox rCell.Address
Next rCell
End Sub
通过我新发现的知识,数组可以容纳范围(thnx jtolle),这是一个如何在数组中存储范围并对它们进行排序的示例
Sub UseArray()
Dim aRng(1 To 3) As Range
Dim i As Long
Set aRng(1) = Range("a1")
Set aRng(2) = Range("a10")
Set aRng(3) = Range("a20")
BubbleSortRangeArray aRng
For i = LBound(aRng) To UBound(aRng)
Debug.Print aRng(i).Address, aRng(i).Value
Next i
End Sub
Sub BubbleSortRangeArray(ByRef vArr As Variant)
Dim i As Long, j As Long
Dim vTemp As Variant
For i = LBound(vArr) To UBound(vArr) - 1
For j = i To UBound(vArr)
If vArr(i).Value > vArr(j).Value Then
Set vTemp = vArr(i)
Set vArr(i) = vArr(j)
Set vArr(j) = vTemp
End If
Next j
Next i
End Sub
目前还不完全清楚你想做什么,但......
如果您想要一个集合,为什么不使用VBA集合对象?
Dim myRanges as New Collection
Collection.Item可以是任何对象,包括Range。
Range对象不包含数据 ; 它包含对工作表单元格的引用。 如果您想要集合中的Range 内容 ,则必须将它们复制到工作表中或从工作表中复制它们。
与Java一样,无论是在Array还是Collection中,您的VBA变量都是短暂的。 如果要在再次打开文件时关闭文件并将数据放在那里,则必须将其放在工作表单元格中。 工作表是您的持久性机制。
我要在这里大踏步前进,所以如果我离开的话,请不理我。 我认为您正在寻找的建议是设置一个单独的工作表作为您的“数据库”,填充包含原始数据的List / Table对象。 在这之前,是你的“用户表”,你在那里做有趣的东西,参考数据库表中的数据。 说出一切。
对我来说,你所谈论的内容并不完全清楚。
如果你问的是创建Range
的能力,它可以映射到任何东西并且自己存在,那么不,没有办法。 Range
对象只是指某个工作表区域的东西。 它没有任何自己的存储或东西。 Range
类的几个不同实例也可以引用相同的工作表区域。
如果你只是想在数组中存储一些引用,那就没关系了,那就去吧。 您的代码唯一的问题是您在使用它们之前不会初始化数组元素:由于Range
是一个引用类型,所有元素都默认使用Nothing
来初始化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.