大家好我有一个小问题,我需要帮助。
我正在从工作表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
所以代码已经让我把正确的数据粘贴到我想要的地方。 现在当我明天再次运行这个宏时,复制的数据与昨天的数据不同,因为它也是每天更新的。 我希望将这些新数据粘贴到昨天的下一列中,同时保留昨天的数据。
数据正在输入列中,标题为日期,因此我保存新的每日数据或每天。 谢谢
答案 0 :(得分:3)
您应该将.End(xlToLeft)
对象的Range
方法与.Cells(4, .Columns.Count)
结合使用,以获得第4行中实际的最后一个非空单元格
然后避免使用Select
/ Selection
和Activate
/ 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")
工作表中复制的最后一行。