6

这应该很简单,但我遇到了困难。我想复制单元格 A3 到 E3,并将它们粘贴到不同工作表的下一个空行中。我以前在更长的代码字符串中使用过这个代码。但我不得不调整它,这次它不起作用。当我运行下面看到的代码时,我得到一个“应用程序定义的或对象定义的错误”。感谢所有帮助。

Private Sub CommandButton1_Click()
Dim lastrow As Long

lastrow = Range("A65536").End(xlUp).row
   Range("A3:E3").Copy Destination:=Sheets("Summary Info").Range("A:A" & lastrow)
End Sub
4

4 回答 4

14

在没有首先限定工作表的情况下小心使用“范围(...)”,因为它将使用当前活动的工作表来制作副本。最好完全限定两张表。请试一试(请使用复制工作表更改“Sheet1”):

编辑:仅根据以下评论编辑粘贴值。

Private Sub CommandButton1_Click()
  Application.ScreenUpdating = False
  Dim copySheet As Worksheet
  Dim pasteSheet As Worksheet

  Set copySheet = Worksheets("Sheet1")
  Set pasteSheet = Worksheets("Sheet2")

  copySheet.Range("A3:E3").Copy
  pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
  Application.CutCopyMode = False
  Application.ScreenUpdating = True
End Sub
于 2013-07-31T16:58:23.710 回答
6

代码不起作用的原因是 lastrow 是从当前活动的任何工作表中测量的,并且“A:A500”(或其他数字)不是有效的范围参考。

Private Sub CommandButton1_Click()
    Dim lastrow As Long

    lastrow = Sheets("Summary Info").Range("A65536").End(xlUp).Row    ' or + 1
    Range("A3:E3").Copy Destination:=Sheets("Summary Info").Range("A" & lastrow)
End Sub
于 2013-07-31T17:48:02.807 回答
3

你也可以试试这个

Private Sub CommandButton1_Click()

Sheets("Sheet1").Range("A3:E3").Copy

Dim lastrow As Long
lastrow = Range("A65536").End(xlUp).Row

Sheets("Summary Info").Activate
Cells(lastrow + 1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

End Sub
于 2013-07-31T17:05:07.997 回答
3

下面是运行良好的代码,但每次<=11在工作表“计算器”中满足条件时,我的值在工作表“最终”中重叠

我希望您能支持我修改代码,以便光标应该移动到下一个空白单元格,并且值会像列表一样继续累加。

Dim i As Integer
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets("Calculator")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Final")

For i = 2 To ws1.Range("A65536").End(xlUp).Row

    If ws1.Cells(i, 4) <= 11 Then

        ws2.Cells(i, 1).Value = Left(Worksheets("Calculator").Cells(i, 1).Value, Len(Worksheets("Calculator").Cells(i, 1).Value) - 0)
        ws2.Cells(i, 2) = Application.VLookup(Cells(i, 1), Worksheets("Calculator").Columns("A:D"), 4, False)
        ws2.Cells(i, 3) = Application.VLookup(Cells(i, 1), Worksheets("Calculator").Columns("A:E"), 5, False)
        ws2.Cells(i, 4) = Application.VLookup(Cells(i, 1), Worksheets("Calculator").Columns("A:B"), 2, False)
        ws2.Cells(i, 5) = Application.VLookup(Cells(i, 1), Worksheets("Calculator").Columns("A:C"), 3, False)

    End If
Next i
于 2014-12-11T16:04:19.593 回答