【问题标题】:Copy and Paste dynamic range between worksheets在工作表之间复制和粘贴动态范围
【发布时间】: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。你修好了。

标签: vba excel


【解决方案1】:

好的,我说这可能不是您的问题的原因是,如果一个问题会导致 RTE 1004(我认为)。如果src 未处于活动状态(这就是导致错误的原因,一个范围引用了两个工作表),您需要使用工作表引用来限定所有范围。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多