我试图让我的电子表格在插入新行时自动采用以前的行格式和公式。
我读过您可以在哪里设置工作表以在进行更改时自动运行代码,但是我很难让代码正常工作。
我尝试了以下操作,每次插入新行时,它都会不断添加一行,直到出现错误并且我必须强制退出:
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
Run Code Online (Sandbox Code Playgroud)
我添加了Cell Value = 10看看它是否有效。这只是一个测试,但它仍然失败。
有谁知道可能的解决方案?
您的代码中有两个主要问题
.Insert不会做你认为它会做的事情。它不检测插入的行,它插入行。我假设“......插入一个新行......”你的意思是插入一整行
这个演示避免了级联.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
Run Code Online (Sandbox Code Playgroud)
您似乎附加了错误的事件。您已将代码附加到“Worksheet_Change”事件,但您的代码也导致工作表发生更改
Cells(1, 2).Value = 10
Run Code Online (Sandbox Code Playgroud)
它右转并调用“Worksheet_Change”事件。
至于要附加的正确事件,似乎没有“插入新行”的本机事件。
本页对此进行了讨论,这可能是您问题的答案......
| 归档时间: |
|
| 查看次数: |
17279 次 |
| 最近记录: |