像@laughsloudly说,你的代码现在正在做的是什么,一旦你在A1的范围内做出改变的任何地方:D25它将开始插入行,直到Excel耗尽行,这是一个开放的循环。
代码:
If Target.Range("A1:D25") = ActiveCell.EntireRow.Insert Then
是为了检查所采取的行动是否是要被监测的范围内。你不想在这一行中执行一个动作。相反,您想要更类似的东西:
If Target.Range("A1:D25") = ActiveCell Then
这将允许您根据工作表中的操作运行代码。但是,您的声明“我试图让我的电子表格在插入新行时自动采用以前的行格式和公式。”并不完全合乎逻辑。我假设你的意思是从上面的行复制所有格式,只有某些单元格的公式是正确的?因此,假设您的行具有相对于列A的公式,您不希望复制所有行,因为您会覆盖A.此外,在这种情况下,您只需要监视列A.
因此,假设您有列B到K中依赖列A的公式,那么您只希望对列A进行更改以影响电子表格。然后,您的代码会是这个样子:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = ActiveCell.Column Then
refRow = Target.Row - 1
thisRow = Target.Row
Range("B" & refRow & ":K" & refRow).Copy Range("B" & thisRow & ":K" & thisRow)
End If
End Sub
此副本下来的一切,但A列,当你进行了更改A.而且,正如前面提到的,你不想要的代码进行到列的任何变化一个(在这种情况下)没有任何东西把它从递归循环中分离出来。最好只是将条件格式应用于您指定为目标的任何列。
希望帮助,
N8
这是看起来应该工作但有趣的方式打破的东西之一。我不是100%确定它在If语句中做了什么......当你说“插入一个新行”时,你的意思是你将一些数据追加到一行新的行中,进一步向下,或者你实际上是右击插入新行?在任何一种情况下,如果最后一行数据向下移动,您可以放置一个事件,该事件在每个worksheet_change后检查最后一行,并将其附加到/检查包含prev的隐藏工作表中的值。最大行,如果值更高,则运行 – Acantud 2014-08-29 21:38:54