请参阅结束以进行编辑以响应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,为了进一步澄清,这是一个快速的例程,我敲了一下来说明你的观点。
**格式化检查失败(仍然在手机上写)所以不让我发帖。这是文本文件中代码的保管箱链接:
答案 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
中测试数据:
观看变量DataSubSet
(我已设置i = 3
和io = 10
):