我正在尝试编写一个基本代码,其中我要从前一张工作表中复制可变数量的单元格,然后将这些复制的单元格插入新的工作表中,从而将我已经放入新工作表中的数据推送下。
这是每周的任务,我打开一个新工作表,在其中粘贴一些新信息,然后运行代码以复制前几周工作表并将复制的单元格插入新工作表中。
`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来定义图纸。
答案 0 :(得分:1)
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,application定义的错误”。
请注意,Range.End(xlDown)
很有可能无法将您降落在您认为合适的地方。通常,从工作表底部的Range.End(xlUp)
开始查找最后一行通常更可靠:
sourceSheet.Range(sourceStart, sourceSheet.Range("A" & Rows.Count & ":K" & Rows.Count).End(xlUp)).Copy
如果目标工作表包含ListObject
,请确保插入的列不超过表包含的列-如果手动执行此操作,则会收到以下消息:
如果以编程方式执行此操作,那么您将获得: