0

请参阅结尾以响应 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 是确定我感兴趣的单元格的变量;它们都随着总体循环而变化。

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

在此先感谢,山姆

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

帕特里克,为了进一步澄清,这是我为说明你的观点而敲击的一个快速例程。

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

https://db.tt/E0btoI5f

4

1 回答 1

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

测试数据

观察变量DataSubSet(我设置了i = 3and io = 10):

观察输出

于 2013-09-30T06:36:55.743 回答