像@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