用于复制/粘贴数据的宏

时间:2017-11-13 21:02:08

标签: vba

这是我的代码。我试图在一个范围内找到最后填充的行。然后将该数据作为公式复制到范围中的下一个空白行。最后再次复制最后填充的行并将其粘贴到第二个到最后一个填充的行作为值。简而言之,将最后一行/单元格中的公式向下移动一行,并将该数据保留在作为数字复制的位置。因此,当新数据进入文件时,公式会重新计算,并且我不会丢失先前计算的数据。希望这是有道理的。下面的代码运行但除了将数据粘贴为现有行中的值之外似乎没有做任何其他操作。我究竟做错了什么?

Sub Data Copy()

Dim myLastCell As Range
Set myLastCell = LastCell(Worksheets("YTD Metric Calculator").Range("E7:J76"))

Sheets("YTD Metric Calculator").Range("E7:J" & myLastCell.Row).Copy
Sheets("YTD Metric Calculator").Range("E7:J" & myLastCell.Row + 1).PasteSpecial Paste:=xlPasteFormulas
Sheets("YTD Metric Calculator").Range("E7:J" & myLastCell.Row).Copy
Sheets("YTD Metric Calculator").Range("E7:J" & myLastCell.Row + 1).PasteSpecial Paste:=xlPasteValues
'Retain Yesterday's YTD Metric Data

Function LastCell(r As Range) As Range

Dim LastRow&, lastCol%

On Error Resume Next

With r

LastRow& = .Cells.Find(What:="*", _
  SearchDirection:=xlPrevious, _
  SearchOrder:=xlByRows).Row

lastCol% = .Cells.Find(What:="*", _
  SearchDirection:=xlPrevious, _
  SearchOrder:=xlByColumns).Column

End With

Set LastCell = r.Cells(LastRow&, lastCol%)

End Function

VBA Goal

1 个答案:

答案 0 :(得分:1)

您的LastCell函数没有按照您的想法执行操作,因为它确定了范围内最后一个使用过的单元格的工作表中的行和列,然后使用它作为范围开头的偏移量。

因此,如果E7:J76中最后一次使用的行是第10行,而最后一次使用的列是第I列,则从函数返回的单元格是单元格M16(即{{1}以下的9行},以及右边的8列。

更改

E7

Set LastCell = r.Cells(LastRow&, lastCol%)

Set LastCell = r.Cells(LastRow& - r.Row + 1, lastCol% - r.Column + 1)

复制公式,然后用值替换的部分应该类似于:

Set LastCell = r.Worksheet.Cells(LastRow&, lastCol%)

可以使用Sheets("YTD Metric Calculator").Range("E" & myLastCell.Row).Resize(1, 6).Copy Sheets("YTD Metric Calculator").Range("E" & myLastCell.Row + 1).Resize(1, 6).PasteSpecial Paste:=xlPasteFormulas Sheets("YTD Metric Calculator").Range("E" & myLastCell.Row).Resize(1, 6).Value = _ Sheets("YTD Metric Calculator").Range("E" & myLastCell.Row).Resize(1, 6).Value 块重写,以节省一些按键:

With