在动态数组中存储行,列和表

时间:2015-08-20 14:19:55

标签: arrays excel vba excel-vba

我被告知有一种方法可以将数据存储在动态数组中,然后可以在函数中引用它。

我来自我最近回答的问题:Showing hidden column in another sheet

我试图找出如何在动态数组中存储我的代码必须对其执行操作的行(第一个数组),列(第二个数组)和工作表(第三个数组)。 我的课堂上还没有完成数组,我只是猜测它是我研究过的动态数组。你认为这可以使用不同的尺寸在同一个阵列中完成吗? (已编辑 - >) - 更具体:我正在寻找一种方法来存储特定工作表的一些特定行(或列)然后(在一个循环中我猜)为每个元素运行我的函数。 / p>

我已阅读基本文档(https://msdn.microsoft.com/en-us/library/aa716275(v=vs.60).aspx)并在此处查找类似帖子,但我找不到它。如果有人可以指出我应该做什么或阅读以实现这一点,我可以尝试自己做,如果你认为它更好。

编辑: 我想我正在取得一些进展,但我仍然不知道如何引用该范围内的工作表。

这是否可以完成工作(如果我不需要工作表参考)?

Public Sub Test()
Dim Rng As Range
    Dim Area As Range
    Set Rng = Range("A1:A10,B1:B20,G1:G3")
    For Each Area In Rng.Areas
        Area.Hidden = True
    Next Area
End Sub

1 个答案:

答案 0 :(得分:1)

您可以使用单个Range数组来管理它,因为范围指的是:

  • 表格
  • 专栏

    Dim array() as Range
    ...
    ' Store with
    set array(i) = worksheet.Range(a, b)
    ...
    ' Read with
    set range = array(i)
    

您问题中msdn的链接说明了如何管理动态数组

<强>更新

代码中的问题是您没有参考您想要的工作表。 如果没有指示工作表,在最好的情况下会抛出错误,在最坏的情况下它会采用“活动表”(是的,错误是一个更好的情况,然后工作你不知道是什么)。

考虑您知道工作表的名称(或其位置),您可以在参数

中传递它
Public Sub Test(byval sheetname as string)
    ' First solution: declare a worksheet variable referencing to your worksheet
    dim ws as worksheet, rng as range, area as range
    set ws = Worksheets(sheetname)
    Set rng = ws.Range("A1:A10,B1:B20,G1:G3")
    For Each area In rng.Areas
        area.Hidden = True
    Next Area

    ' You could replace the dim of ws by a With Worksheets(sheetname) 
    ' and work with .Range() instead
End Sub