每次粘贴后需要复制并粘贴每日的macros,然后右移到下一列

嗨,大家好,我有一个小问题,我需要帮助。

我从工作表1,单元格区域B1:B21复制数据并粘贴到工作表2,单元格区域C4:C25。

我粘贴的数据后,我想跨过一列向右,

这是我的代码到目前为止。

Private Sub CommandButton1_Click() Workbooks("COPY Service Tracker August 2016.xlsm").Activate Sheets("Sheet2").Select ActiveSheet.Range("B1:B21").Select Selection.Copy Sheets("Queue Performance").Select ActiveSheet.Range("F4").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False End Sub 

所以代码已经得到了我,只要粘贴正确的数据到我想要的地方。 现在当我明天再次运行这个macros时,复制的数据与昨天的数据是不同的,因为它也是每天更新的。 我想把这个新的数据粘贴到昨天的下一列,同时保留昨天的数据。

数据被input到列标题为date,所以我保存新的每日数据或每一天。 谢谢

您应该使用Range对象的.End(xlToLeft)方法连接到.Cells(4, .Columns.Count)以获取第4行中实际的最后一个非空单元格

那么请避免使用Select / SelectionActivate / ActiveXXX ,这两者都有明显的速度问题,并且大多会导致对实际引用的工作簿/工作表的松散控制

所以你可以使用

 Option Explicit Private Sub CommandButton1_Click() Dim wb As Workbook Set wb = Workbooks("COPY Service Tracker August 2016.xlsm") With wb.Worksheets("Queue Performance") .Cells(4, .Columns.Count).End(xlToLeft).Offset(, 1).Resize(, 21).value = wb.Worksheets("Sheet2").Range("B1:B21").value End With End Sub 

您可以使用.End(xlToRight)来查找最右边的单元格,并使用.Offset(0,1)来引用下一列(它将是空白的)。 例如:

 Workbooks("COPY Service Tracker August 2016.xlsm").Activate Sheets("Sheet2").Select ActiveSheet.Range("B1:B21").Select Selection.Copy Sheets("Queue Performance").Select ActiveSheet.Range("A4").End(xlToRight).Offset(0,1).Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False 

(假设A列向前填充)

正如@Tim在评论中提到的那样,强烈build议避免。select.Copy.Copy 。 我还build议使用ThisWorkbook而不是ActiveWorkbook因为它有助于debugging。 通过设置范围,您将使过程更快,更不容易出错:

 Dim ws1, ws2 as Worksheet Dim lCol as Long Set ws1 = ThisWorkbook.Sheets("Queue Performance") Set ws2 = Workbooks("COPY Service Tracker August 2016.xlsm").Sheets("Sheet2") lCol = ws1.Cells(1, Columns.Count).End(xlToLeft).Column + 1 lRow = ws2.Cells(Rows.Count, "B").End(xlup).Row ws1.Range(ws1.Cells(1, lCol), ws1.Cells(lRow, lCol)).Value = _ ws2.Range("B1:B" & lRow).Value 

lCol是填充在ThisWorkbook.Sheets("Queue Performance")工作表中的最后一列, lRow是要从Workbooks("COPY Service Tracker August 2016.xlsm").Sheets("Sheet2")复制的最后一行Workbooks("COPY Service Tracker August 2016.xlsm").Sheets("Sheet2")工作表。