【发布时间】:2013-08-16 04:21:52
【问题描述】:
我正在修改一些现有代码。此代码从预先存在的工作表表中创建行集合。它创建了一个大型二维集合,每列中都有不同的信息。有一个单独的类模块来声明每一列的数据类型。
代码通过依次遍历每个项目将二维集合写入新工作表。我以前从未使用过集合,并且想一次性将集合写入工作表。当表有很多记录时,当前代码需要很长时间。
有没有办法将整个集合转换为二维数组,或者这样我就可以一次编写二维数组?或者有没有办法将整个集合写入工作表,就像使用二维数组一样?我试图搜索这个并且到目前为止没有成功。任何一般点将不胜感激!
这是一些示例代码,以粗体显示 cmets,用于说明如何使用集合。
定义类模块,命名为 TableEntry
Public Item1 As String
Public Item2 As String
Public Item3 As String
Public Item4 As Integer
Public Item5 As Integer
主要例程 - 创建集合、填充集合、将集合写入工作表
Sub MainRoutine()
Dim table As Collection
Set table = New Collection
Call FillCollection(File As String, ByRef table As Collection)
Call WriteCollectionToSheet(ByRef table As Collection)
子程序 1 - 填充集合
Dim wb As Workbook
Set wb = Workbooks.Open(File)
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Dim R As Range
Set R = ws.Range("A2")
Dim e As TableEntry
For i = 1 To 20
Set e = New TableEntry
e.Item1 = R.Offset(i + 1, 0).Offset(0, 0)
e.Item2 = R.Offset(i + 1, 0).Offset(0, 1)
e.Item3 = R.Offset(i + 1, 0).Offset(0, 2)
e.Item4 = R.Offset(i + 1, 0).Offset(0, 3)
e.Item5 = R.Offset(i + 1, 0).Offset(0, 4)
table.Add e
Next i
Next ws
子例程 2 - 将集合写入工作表
【问题讨论】:
-
谢谢破布。我应该自己找到这个
-
上面链接中的答案使用数组而不是集合。这是我应该做的,还是有办法将集合转移到数组,或者确实一次性编写集合?
-
其实,如果你关闭屏幕更新和计算,它会足够快,即使你使用循环。
-
@psychonomics 感谢您更新问题。现在它使它更清楚了。你能详细说明这一行
Set e = New TableEntry100613吗?我认为那条线就这样失败了。您是否在动态创建类类型?整个事情看起来就像你有一个包含 5 个项目的自己的类的集合。 -
@psychonomics 如果您要重写,我建议从一开始就直接使用数组。类的使用可以很容易地与
Types交换,除非您创建的每个类都接收一个唯一标识符,以便您可以遍历 Collection Of Collections。
标签: arrays excel vba collections