【发布时间】:2018-02-16 15:14:11
【问题描述】:
我有来自多个工作表的数据,这些数据需要根据某个源文件名聚合到多个工作表中。我所有的数据都存储在源的 A16:C115 中。我想将该数据聚合到适当的工作表中,堆叠数据(即设置 1- A1:C100,设置 2- A101,C200)。这个数据大小可以在工作簿之间变化,这就是我使用单元格和偏移量/行数/列计数器的原因。
'dest: name of worksheet for data to be pasted into
'src: data source worksheet
'offset: current count of data sources that have been pasted, indexed 0
'rows: row count to be pasted
'col: column count to be pasted
Sub addTrend(dest As Variant, src As Worksheet, offset As Integer, rows As Integer, col As Integer)
Debug.Print CStr(dest), offset, rows, col
src.Range(Cells(16, 1), Cells(15 + rows, col)).Copy (Worksheets(CStr(dest)).Range(Cells((offset * rows) + 1, 1), Cells((offset + 1) * rows, col)))
End Sub
此代码的结果是没有将任何内容粘贴到目标工作表中。由于以下原因,我很确定我的代码中的错误在复制/粘贴行中。如上所述,我觉得这个复制和粘贴功能是为了完成所需的行为而编写的,但也许我遗漏了一些东西。有什么想法吗?
复制/粘贴行尝试无效:
src.Range(Cells(16, 1), Cells(15 + rows, col)).Copy Worksheets(CStr(dest)).Range("A" & (offset * rows) + 1)
测试:
我已经测试(未显示)可以找到工作表 dest(迭代所有打开的工作表并比较名称)。我已经测试过是否也找到了源工作表(通过写入单元格)。偏移量计算正确,行/列是适当的。
这是调试打印行的sn-p:
dapSNVHeight 11 100 3
dapSNVHeight 12 100 3
dapSNVHeight 13 100 3
detAvgPeakHeight 0 100 3
detAvgPeakHeight 1 100 3
detAvgPeakHeight 2 100 3
destination、当前偏移量、行数和列数。
编辑/添加:
调用循环:
For Each trendSet In trendSets
If InStr(ws.name, trendSet) Then
index = findIndex(setIndex, CStr(trendSet), setSize)
addTrend trendSet, ws, setCounter(index), 100, 3
setCounter(index) = setCounter(index) + 1
End If
Next trendSet
另外,指出它是复制/粘贴功能。在src.range.copy 调用之后调用Debug.Print 不会打印任何内容。所以也许第一个复制/粘贴正在挂起。
分辨率:
src.Range(src.Cells(srcRow + 1, 1), src.Cells(srcRow + rows, col)).Copy Worksheets(dest).Range(Worksheets(dest).Cells(cRow + 1, 1), Worksheets(dest).Cells(cRow + rows, col))
【问题讨论】:
-
@braX 是的,复制功能的参数。 msdn.microsoft.com/en-us/vba/excel-vba/articles/…
-
尝试删除目标周围的括号。
-
应该是
src.Range(src.Cells(16, 1), src.Cells(15 + rows, col))但这可能不是您的问题的原因。你能举个例子说明你是如何调用这个子的吗? -
@SJR 也许这会产生影响。我现在有 99% 是复制/粘贴行导致问题。我已经添加了调用循环。
-
@SJR 您将其添加为答案,我将选择它。但请确保您也点击了参数中的
Worksheets(dest).Cells。你修好了。