【问题标题】:Copy / paste within for cycle在循环内复制/粘贴
【发布时间】:2019-11-10 04:36:40
【问题描述】:

我正在尝试将多张工作表中的内容复制到最后一张工作表(我们称之为“报告”工作表),其中工作表的内容从前一张工作表内容之后的第一个空闲行开始复制。

我正在使用 for 循环转到每个工作表并复制我需要的范围并将其粘贴到报告工作表,但我得到:

运行时错误 1004:“应用程序定义或对象定义错误”

我已经尝试更改复制/粘贴内容的方式,但仍然无法正常工作 (copy and paste special; destination range.value = source range.value; select; ...)。

你知道发生了什么吗? 提前感谢您的帮助!

Sub final_data()

    Dim list_end, last_line, h, first_line_range, last_line_range As Integer
    Dim sht_qty As Integer

    h = 1
    i = 2

    list_end = 1

    sht_qty = Application.Sheets.Count


    For h = 1 To sht_qty

        If Workbooks("Testes2").Sheets(h).Name <> "Report" Then

            last_line = Workbooks("Testes2").Sheets(h).Range("A1").End(xlDown).Row

            first_line_range = list_end + 1
            last_line_range = last_line + list_end - 1

            'the error is on the next line            
            Workbooks("Testes2").Sheets(h).Range("A2:I" & last_line).Copy Destination:=Workbooks("Testes2").Sheets("Report").Range("A" & first_line_range & "I" & last_line_range)

        Else
        End If   

    Next h

End Sub

【问题讨论】:

  • 请阅读我对您收到的答案的评论。使用first_line_range 将导致来自每个源工作表的数据一次又一次地粘贴到目标工作表上的相同范围内。

标签: excel vba


【解决方案1】:

只需将您的目的地更改为:

Destination:=Workbooks("Testes2").Sheets("Report").Range("A" & first_line_range)

应该可以的

【讨论】:

  • 如果它对你有帮助 @SSGrace 请在我的答案上签名:)
  • 您的代码确实修复了Run-time error 1004:,但它只是一遍又一遍地将每个源工作表中的范围粘贴到目标工作表中的相同范围。 first_line_range 将复制的每个工作表的 Sheets(Report) 的粘贴范围设置为 Range("A2")。从多个来源粘贴时,您需要重置目标工作表上的最后一行。例如Destination:=Workbooks("Testes2").Sheets("Report").Cells(Rows.Count, 1).End(xlUp).Offset(1).
  • @GMalc,谢谢,我一摆脱 1004 就注意到了。已经修复了!
  • @Teamothy,对不起,这是我在 stackoverflow 上的第一篇文章。现在可以了吗?
  • @SSGrace,谢谢 :) 我希望我在你的工作中至少对你有所帮助 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
  • 2019-12-27
  • 2015-12-02
  • 2018-01-05
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多