如何将多个Areas存储为Areas类型的数组?
解决VBA中Areas类型数组赋值的报错问题
你遇到的"invalid use of property"错误主要有两个原因:一是对象类型赋值没用到Set关键字,二是类型不匹配——Selection.Areas(i)返回的是Range对象,而非Areas对象,直接赋值给Areas类型变量自然会报错。
既然你明确不想用Range数组,而是要存储Areas类型的数组,我们可以通过单个Range的.Areas属性来生成包含该Range的Areas集合,这样每个数组元素都是独立的Areas对象。修正后的代码如下:
Dim SelAreas() As Areas Dim NumAreas As Integer Dim i As Integer NumAreas = Selection.Areas.Count ReDim SelAreas(1 To NumAreas) For i = 1 To NumAreas ' 利用单个Range的Areas属性,生成包含自身的Areas集合 Set SelAreas(i) = Selection.Areas(i).Areas Next i
代码说明:
- VBA中所有对象类型的赋值都必须使用
Set关键字,这是你之前代码遗漏的关键步骤。 Selection.Areas(i)是单个Range区域,它的.Areas属性会返回一个仅包含自身的Areas集合,刚好符合你要存储Areas类型的需求。- 后续你可以通过
SelAreas(index).Count查看每个Areas集合的区域数量(这里都是1),或者用SelAreas(index)(1)访问集合里的具体Range。
内容的提问来源于stack exchange,提问作者Balasubramanian Seshadri
相关产品推荐
相关产品推荐

