Arrays 覆盖&;在excelvba中调整数组大小
关于PatricK评论的回复,请参见结束 抱歉,如果这是一个基本的问题,但我一直在这里和其他网站寻找,无法找到答案 这是我第一次尝试VBA数组(我对VBA基本上是新手),我正在努力学习一些语法。我试图将工作表中的一些数据(单列的一部分)读入数组,对其进行一些处理,将其写入另一张工作表,然后用从第一张工作表中读取的更多数据覆盖数组。一个关键点是,每次迭代读取的数据点数量会有所不同(例如,第一个循环上有4个数据点,第二个循环上可能有3个数据点……),因此数组大小也应该改变 我的代码尝试在第一次迭代中有效,但它似乎没有在第二次循环中拾取数据,而是将数组留空。这是我的代码(很抱歉,如果格式不正确,我目前只能通过手机访问互联网!): 这里i和io是决定我感兴趣的细胞的变量;它们每个都随总体循环而变化 正如我提到的,这只适用于第一次迭代。任何关于我错在哪里的指点都将不胜感激 提前感谢,, 萨姆 ----------------------------------------------------------------------------------- 帕特里克,为了进一步澄清,这里有一个简单的例行公事来说明你的观点 **格式化检查失败(仍在电话上书写),因此不允许我发布。以下是文本文件中代码的dropbox链接:Arrays 覆盖&;在excelvba中调整数组大小,arrays,excel,resize,overwrite,vba,Arrays,Excel,Resize,Overwrite,Vba,关于PatricK评论的回复,请参见结束 抱歉,如果这是一个基本的问题,但我一直在这里和其他网站寻找,无法找到答案 这是我第一次尝试VBA数组(我对VBA基本上是新手),我正在努力学习一些语法。我试图将工作表中的一些数据(单列的一部分)读入数组,对其进行一些处理,将其写入另一张工作表,然后用从第一张工作表中读取的更多数据覆盖数组。一个关键点是,每次迭代读取的数据点数量会有所不同(例如,第一个循环上有4个数据点,第二个循环上可能有3个数据点……),因此数组大小也应该改变 我的代码尝试在第一次迭代中
它工作一次的一个可能原因可能是“执行处理”代码激活了另一个工作簿。也不确定为什么使用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
Dim oWB作为工作簿
'循环启动
设置oWB=ActiveWorkbook
'或设置oWB=工作簿(“”)
带有oWB.工作表(“表1”).范围(“A”&i&“:A”&io)
ReDim数据子集(1到.Rows.Count,1到.Columns.Count)
DataSubSet=.Value
以
'在此行上方执行处理和完成循环
设置oWB=Nothing
表1中的测试数据:
查看变量DataSubSet
(我已经设置了I=3
和io=10
):
Hi Sam,当您将数组分配给范围时,它会自动调整大小,因此不需要使用
ReDim
行。另外,尝试在赋值行追加.Value
:DataSubSet=.Range(…).Value
。看看io
和I
是如何更新的会很有帮助,问题可能就在这里。嗨,洛恩尼斯,谢谢你的评论。我已经确认我和io工作正常。下面的PatricK(不知怎么的)设法解决了这个问题,不过还是要谢谢你!帕特里克,非常感谢你的帮助,问题解决了!不幸的是,我不完全理解为什么/如何。我将在下面发布一个快速跟进问题。但再次感谢你,我欠你的债!PatricK,我已将我的问题作为文本文件上传到上面链接的dropbox文件夹中。谢谢
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