需要复制并粘贴每日粘贴,每次粘贴后都会转移到下一列

时间:2016-08-04 09:55:44

标签: excel vba excel-vba

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

我正在从工作表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

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

数据正在输入列中,标题为日期,因此我保存新的每日数据或每天。 谢谢

3 个答案:

答案 0 :(得分:3)

您应该将.End(xlToLeft)对象的Range方法与.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

答案 1 :(得分:1)

您可以使用.End(xlToRight)查找最正确的单元格,并使用.Offset(0,1)引用下一列(将为空白)。 e.g:

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列以上)

答案 2 :(得分:0)

正如@Tim在评论中所提到的,强烈建议避免使用.Select.Copy.Paste。我还建议使用ThisWorkbook代替ActiveWorkbook,因为它在调试时会有所帮助。通过设置范围,您可以使流程更快,更不容易出错:

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")工作表中复制的最后一行。