在工作表

时间:2018-02-16 15:14:12

标签: vba excel-vba excel

我有来自多个工作表的数据,需要根据某些源文件名聚合到多个工作表。我的所有数据都存储在源A16:C115中。我想将这些数据汇总到适当的工作表中,堆叠数据(即设置1- A1:C100,设置2- A101,C200)。这个数据大小可以在工作簿之间变化,这就是我使用Cells和offset / rows / col计数器的原因。

'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(迭代所有打开的工作表并比较名称)。我已经测试过,也找到了源工作表(通过写入单元格)。偏移量正确计数,行/列是合适的。

以下是调试打印行的片段:

dapSNVHeight                11             100           3 
dapSNVHeight                12             100           3 
dapSNVHeight                13             100           3 
detAvgPeakHeight             0             100           3 
detAvgPeakHeight             1             100           3 
detAvgPeakHeight             2             100           3 

destiation,当前偏移量,行数和列数。

编辑/添加:

调用循环:

      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 

另外,指出它是复制/粘贴功能。在Debug.Print通话后拨打src.range.copy不会打印任何内容。所以也许第一次复制/粘贴是挂起的。

分辨率:

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))

1 个答案:

答案 0 :(得分:1)

好的,我之所以说它可能不是你的问题的原因是因为如果一个问题导致RTE 1004(我认为)。如果src未激活,则需要使用工作表参考限定所有范围(导致错误的原因,引用两个工作表的范围)。

src.Range(src.Cells(16, 1), src.Cells(15 + rows, col)).Copy Worksheets(CStr(dest)).Range("A" & (offset * rows) + 1)