使用Range.Copy复制单元格

时间:2019-08-25 21:31:44

标签: excel vba

我正在编写一个Excel工作簿,以进行研究数据,分析每天的价值,然后将输入的数据及其7个摘要计算结果发送到工作簿(命名为测试对象1和工作表test med 1)中进行存档和分析。

range.copy命令正确地复制了直接输入(或通过用户窗体)输入的数据范围和具有描述性标题的单元格。

使用错误的单元格引用复制了P列,其中包含从工作簿的另一张表中引用的数据。单元格AB16='[FAVor Study Medication Daily Calculator8.xlsm]Calculations'!AB7中的数据一起复制(不是...AB16)。该列(AB16-AB22中的所有7个摘要单元格都是如此,但是单元格ab15ab23是对同一工作表上其他单元格的简单引用,已正确复制。

我尝试使用PasteSpecial命令,但遇到另一组问题,接下来我将尝试解决!

我已将问题代码行标记为ProblemLine:

Dim wsCopyfrom As Worksheet
Dim wsCopyto   As Worksheet
'Dim CopyfromLastRow As Long
'Dim CopytoLastRow As Long
'set variables for copy and dest sheets
Set wsCopyfrom = ThisWorkbook.Sheets("EnterData")
Set wsCopyto = ActiveWorkbook.Sheets(medname)
'Find last used row in the copyfrom based on data in column E and the copyto Col A
CopyfromLastRow = wsCopyfrom.Range("E200").End(xlUp).Row
CopytoLastRow = wsCopyto.Range("A200").End(xlUp).Row
'make copy of range, but ensure that all of the block rows are included, to row 10
If CopyfromLastRow > 19 Then
    wsCopyfrom.Range("A7:P" & CopyfromLastRow).Copy wsCopyto.Range("A" & CopytoLastRow + 1)
Else
    'ProblemLine
    wsCopyfrom.Range("A7:q20").Copy wsCopyto.Range("A" & CopytoLastRow + 1)
End If    'if to copy at least to row 19

1 个答案:

答案 0 :(得分:0)

这是预期的“相对参考”行为。如果您自己在Excel中手动复制这些范围,也会发生同样的事情。

两种解决方法:

  1. 将工作表上的公式更改为“绝对引用”,例如='[FAVor Study Medication Daily Calculator8.xlsm]Calculations'!$AB$16
  2. 将代码更改为不使用Copy,例如

    wsCopyto.Range("A" & CopytoLastRow + 1).Formula = wsCopyfrom.Range("A7:Q20").Formula