【发布时间】:2020-02-08 14:08:13
【问题描述】:
这段代码运行良好。然后它就停止了工作。如果我删除一行,它会工作一次,然后在那之后再次失败:
当达到“阈值”时,代码下面的这一行会出现 1004 错误:
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
这是 Excel VBA 宏:
Sub InsertNewRow()
'
' InsertNewRow Macro
' Inserts a new row at row 2 and adds the date/time and user name.
'
' Keyboard Shortcut: Ctrl+Shift+N
'
ActiveSheet.Rows("2:2").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveSheet.Range("H2").Select
ActiveCell.FormulaR1C1 = Now()
ActiveSheet.Range("J2").Select
ActiveCell.FormulaR1C1 = UCase(Application.UserName & "")
ActiveSheet.Range("A2").Select
End Sub
对为什么会发生这种情况以及如何永久防止这种情况有任何想法吗?
更多信息:
数据在工作表的表格中。如果我只是选择一行然后尝试手动插入一行,则 INSERT 选项将显示为灰色。
如果我选择整个表格行,然后尝试插入表格行,则将行添加到表格的选项也会灰显。这似乎是 Excel 格式表的限制。我不确定为什么它不能处理低于 6000 行。好像有问题。
我试过这个是不是表本身的限制:
...收到此错误:
【问题讨论】:
-
表格最后一行有数据吗?
-
因为我使用 VBA 的经验告诉我,选择单元格往往比在未选择单元格时对其进行操作更可靠 我从未见过任何支持这种说法的东西.恰恰相反——避免选择使代码更简洁、更快、更可靠。
-
@EricI 仅当您尝试
.Select那些未激活的工作表上的单元格时,这可能会导致错误。在任何其他情况下,您都可以真正操作未激活的工作表,您只需正确操作即可。 -
使用
Select可能是灾难性的。它允许在选择和动作之间发生一些事情。如果您的脚本运行时间超过几秒钟,那么用户可能会做各种各样的事情,这些事情可能会在您的代码行之间注入一个动作。 -
@ericl 您在工作表上有一个表格这一事实非常相关。您发布的最后一个错误意味着某些内容延伸到工作表的底部。如果不是 UsedRange,可能是表 Databodyrange