【问题标题】:Trying to copy data from multiple sheets one by one and paste to a different sheet.试图从多张纸上一张一张地复制数据并粘贴到另一张纸上。
【发布时间】:2017-10-18 14:47:06
【问题描述】:

我正在尝试一张一张地从多个工作表中复制数据并将它们粘贴到不同的工作表中。下面是我的代码。但是,它显示“运行时错误 1004:范围类的选择方法失败”。

Private Sub CommandButton1_Click()
'Stop if report not filled in fully
If Range("G28") < "1" Then
MsgBox ("Please Amend Quantity")
End If



 If Range("G28") >= "1" Then

  Range("B28").Select
  Selection.Copy
  Sheets("Order List").Range("A1").Offset(1, 0).Select
  ActiveSheet.Paste

 End If

 Sheets("Order List").Columns("A:D").AutoFit



End Sub

代码:"Sheets("Order List").Range("A1").Offset(1,0).Select" 高亮错误。我试图让它从订单列表表下的 A1 中选择 A 行中的空白列,并将当前表下 B28 中的值粘贴到它。请给我一些建议。非常感谢

【问题讨论】:

  • 订单列表表是偶然隐藏的吗?在If Range("G28") &gt;= "1" 中尝试Range("B28").Copy Sheets("Order List").Range("A1").Offset(1,0),而不是现在的内容。
  • 您不能选择工作表上非活动的单元格。

标签: vba excel


【解决方案1】:

不要使用 .Select 或 .Activate。这就是导致你的问题的原因。请参阅此解释以了解如何避免它以及为什么:How to avoid using Select in Excel VBA

这是您的代码的更新版本,应该适合您:

Private Sub CommandButton1_Click()

    Dim wb As Workbook
    Dim wsSource As Worksheet
    Dim wsDest As Worksheet

    Set wb = ActiveWorkbook
    Set wsSource = wb.Sheets("Sheet1")  'Set to correct source worksheet name
    Set wsDest = wb.Sheets("Order List")

    'Stop if report not filled in fully
    If wsSource.Range("G28").Value < 1 Then
        MsgBox "Please Amend Quantity"
        Exit Sub
    End If

    wsSource.Range("B28").Copy wsDest.Range("A2")
    wsDest.Range("A:D").EntireColumn.AutoFit

End Sub

【讨论】:

  • 非常感谢。但是,如果我再次单击其他行的按钮,它会粘贴到 A3 而不是替换 A2?
  • @JDing 不会的。该逻辑不在您的原始代码中。我鼓励您编辑我提供的内容以包含该功能。如果遇到困难,请创建一个新问题。
猜你喜欢
  • 2020-06-12
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 2020-12-10
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多