[英]My “Insert Copied Cells” vba code keeps crashing?
我正在尝试编写一个基本代码,在该代码中,我将从上一个工作表中复制可变数量的单元格,然后将这些复制的单元格插入新工作表中,从而将我已经放入新工作表中的数据下推。
这是每周的任务,我打开一个新工作表,在其中粘贴一些新信息,然后运行代码以复制前几周工作表并将复制的单元格插入新工作表中。
`ActiveSheet.Previous.Select
Range("A2:K2").Select
Range(Selection, Selection.End(xlDown)).Copy
ActiveSheet.Next.Select
ActiveSheet.Cells(2, 1).Select
Selection.Insert Shift:=xlDown`
由于某种原因, Selection.Insert Shift:=xlDown
命令使我的Excel崩溃。 我已经阅读了很多有关如何解决此问题的信息,但是大多数解决方案都是围绕在同一张表中运行代码展开的。 但是由于这是每周的新工作表,因此我无法将其设置为某个相关的工作表。 即我试图避免使用Dim,Set和With定义图纸。
Range.Insert
可能失败的原因有很多,具体取决于该表上的内容...而且仅通过查看该代码段就无法说出原因。
但是,没有任何理由要避免声明和使用变量。 假设宏开始时处于活动状态的工作表(假设Sub ...
不在该代码段的开头附近)是目标工作表...
Dim destSheet As Worksheet
Set destSheet = ActiveSheet
Debug.Assert destSheet.Index > 1 ' if code breaks here, assumption was wrong
Dim sourceSheet As Worksheet
Set sourceSheet = destSheet.Previous
Dim sourceStart As Range
Set sourceStart = sourceSheet.Range("A2:K2")
sourceSheet.Range(sourceStart, sourceStart.End(xlDown)).Copy
destSheet.Range("A2:K2").Insert Shift:=xlDown
如果以上代码类似地失败,则建议您尝试手动执行完全相同的操作,并查看Excel是否为您提供更详细的错误消息,就像当其所有API告诉VBA为“ 1004,应用程序定义的错误”时一样”。
请注意, Range.End(xlDown)
有一个不为零的机会,无法将您降落到您认为的位置。 通常,通过使用Range.End(xlUp)
从工作表的底部开始查找最后一行通常更可靠:
sourceSheet.Range(sourceStart, sourceSheet.Range("A" & Rows.Count & ":K" & Rows.Count).End(xlUp)).Copy
如果目标表包含ListObject
,请确保插入的列不超过表包含的列-如果手动执行此操作,则会收到以下消息:
如果以编程方式执行此操作,那么您将获得:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.