覆盖&在Excel VBA中调整数组大小

时间:2013-09-29 20:59:48

标签: arrays excel-vba resize overwrite vba

请参阅结束以进行编辑以响应PatricK的评论。

道歉,如果这是一个基本问题,但我一直在这里和其他网站环顾四周,找不到答案。

这是我第一次涉足VBA阵列(我一般都是VBA的新手)而且我正在努力学习一些语法。我试图从工作表中读取一些数据(单个列的一部分)到数组中,对它进行一些处理,将其写入另一个工作表,然后用从第一个工作表读取的更多数据覆盖该数组。一个关键点是每次迭代读取的数据点数量会有所不同(例如第一个循环上的4个数据点,第二个循环中的3个数据点......)因此数组大小也应该改变。

我对代码的尝试适用于第一次迭代,但它似乎没有在第二次循环中获取数据,而是将数组留空。这是我的代码(抱歉,如果格式不正确,我目前只能通过手机访问互联网!):

Looping...

Dim DataSubSet

With ActiveWorkbook.Worksheets("Sheet1").Range("A" & CStr(I) & ":A" & CStr(io))
ReDim DataSubSet(1 To .Rows.Count, 1 To .Columns.Count)
DataSubSet = .Range ("A" & CStr(I) & ":A" & CStr(io))
End With

**Do processing** 

End loop

这里i和io是决定我感兴趣的细胞的变量;它们各自随着总体循环而变化。

正如我所提到的,这仅适用于第一次迭代。关于我出错的地方的任何指示都将不胜感激!

提前致谢, 萨姆

----------------------------------------------- ------------------------------------

PatricK,为了进一步澄清,这是一个快速的例程,我敲了一下来说明你的观点。

**格式化检查失败(仍然在手机上写)所以不让我发帖。这是文本文件中代码的保管箱链接:

https://db.tt/E0btoI5f

1 个答案:

答案 0 :(得分:0)

一次工作的一个可能原因可能是因为"做处理"代码激活了另一个工作簿。还不确定为什么使用2D数组存储1D数组值。

但请尝试:

Dim oWB as Workbook
' Loop Start

Set oWB = ActiveWorkbook
'Or Set oWB = Workbooks("<workbook name you are trying to get the data from>")    
With oWB.Worksheets("Sheet1").Range("A" & i & ":A" & io)
    ReDim DataSubSet(1 To .Rows.Count, 1 To .Columns.Count)
    DataSubSet = .Value
End With

' Do Processing and finish loop above this line
Set oWB = Nothing

Sheet1中测试数据:

TestData

观看变量DataSubSet(我已设置i = 3io = 10):

WatchOutput