我试图让我的电子表格在插入新行时自动采用以前的行格式和公式。
我读到您可以在哪里设置工作表以在发生更改时自动运行代码,但我很难让代码正常工作。
我已尝试以下操作,每次插入新行时,它都会不断添加行,直到出现错误并且我必须强制退出:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Range("A1:D25") = ActiveCell.EntireRow.Insert Then
Cells(1, 2).Value = 10
End If
End Sub
我添加了Cell Value = 10
看看它是否有效。这只是一个测试,但仍然失败。
有谁知道可能的解决方案?
您的代码中有两个主要问题
- 您正在引发事件级联。即您的更改事件正在触发进一步的更改事件
-
.Insert
并没有像你想象的那样做。事实并非如此detect插入的行,它Inserts rows.
我假设“...插入新行...”你的意思是插入整行
该演示避免了级联.EnableEvents = False
和用途Copy
, pasteSpecial
复制格式和公式。
Option Explicit
Dim RowsCount As Long ' Variable to track number of rows used in sheet
Private Sub Worksheet_Activate()
RowsCount = Me.UsedRange.Rows.Count
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo EH
' Detect whole row changed
If Target.Columns.Count = Me.Columns.Count Then
' Detect Extra Row
If RowsCount = Me.UsedRange.Rows.Count - 1 Then
' Copy Formulas and Format new row
Application.EnableEvents = False
If Target.Row > 1 Then
Target.Offset(-1, 0).Copy
Target.PasteSpecial xlPasteFormulas, xlPasteSpecialOperationNone, False, False
Target.PasteSpecial xlPasteFormats, xlPasteSpecialOperationNone, False, False
Application.CutCopyMode = False
End If
End If
RowsCount = Me.UsedRange.Rows.Count
End If
EH:
Application.EnableEvents = True
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)